python基于event实现线程间通信控制
这篇文章主要介绍了python基于event实现线程间通信控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
import threading,time class Boss(threading.Thread): def run(self): print("We must work today!") event.isSet() or event.set() time.sleep(5) print("You can go home right now!") event.isSet() or event.set() class Worker(threading.Thread): def run(self): event.wait() print("Oh,my god!!!") time.sleep(1) event.clear() event.wait() print("Oh,yeah!!!") if __name__ == "__main__": event = threading.Event() threads = [] for i in range(5): threads.append(Worker()) threads.append(Boss()) for t in threads: t.start() for t in threads: t.join()
运行后显示:
We must work today! Oh,my god!!! Oh,my god!!! Oh,my god!!! Oh,my god!!! Oh,my god!!! You can go home right now! Oh,yeah!!! Oh,yeah!!! Oh,yeah!!! Oh,yeah!!! Oh,yeah!!! Process finished with exit code 0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Python多线程编程(八):使用Event实现线程间通信
使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法是使用threading.Event对象.使用threading.Event可以使一个线程等待其他线程的通知,我们把这个Event传递到线程对象中,Event默认内置了一个标志,初始值为False.一旦该线程通过wait()方法进入等待状态,直到另一个线程调用该Event的set
-
python 实现线程之间的通信示例
前言:因为GIL的限制,python的线程是无法真正意义上并行的.相对于异步编程,其性能可以说不是一个等量级的.为什么我们还要学习多线程编程呢,虽然说异步编程好处多,但编程也较为复杂,逻辑不容易理解,学习成本和维护成本都比较高.毕竟我们大部分人还是适应同步编码的,除非一些需要高性能处理的地方采用异步. 首先普及下进程和线程的概念: 进程:进程是操作系统资源分配的基本单位. 线程:线程是任务调度和执行的基本单位. 一个应用程序至少一个进程,一个进程至少一个线程. 两者区别:同一进程内的线程共享本进
-
Python TCPServer 多线程多客户端通信的实现
最简单.原始的TCP通信demo 服务端Http请求: import socket # 创建一个servicesocke serviceSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 给服务器绑定地址(ip地址,端口号) serviceSocket.bind(("192.168.171.1", 80)) print("等待客户端接入") # sock 是客户端的socket信息 # addr
-
python 多线程中子线程和主线程相互通信方法
需求:主线程开启了多个线程去干活,每个线程需要完成的时间不同,但是在干完活以后都要通知给主线程 下面上代码: #!/usr/bin/python # coding:utf8 ''' 多线程和queue配合使用,实现子线程和主线程相互通信的例子 ''' import threading __author__ = "Kenny.Li" import Queue import time import random q = Queue.Queue() class MyThread(thread
-
Python队列、进程间通信、线程案例
进程互斥锁 多进程同时抢购余票 # 并发运行,效率高,但竞争写同一文件,数据写入错乱 # data.json文件内容为 {"ticket_num": 1} import json import time from multiprocessing import Process def search(user): with open('data.json', 'r', encoding='utf-8') as f: dic = json.load(f) print(f'用户{user}查看
-
python基于event实现线程间通信控制
这篇文章主要介绍了python基于event实现线程间通信控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import threading,time class Boss(threading.Thread): def run(self): print("We must work today!") event.isSet() or event.set() time.sleep(5) print("You can go ho
-
python中Event实现线程间同步介绍
前言: Event在python线程间同步是一种常用的方法,本博客以生产者线程和工作者线程为例说明Event在线程间进行10次同步的应用. import threadingfrom threading import Event, Threadimport timeimport randomfrom time import sleep pevent = Event() #默认是没有事件的pevent.clear() cevent = Event() cevent.clear() runtimes
-
Python如何实现线程间通信
问题 你的程序中有多个线程,你需要在这些线程之间安全地交换信息或数据 解决方案 从一个线程向另一个线程发送数据最安全的方式可能就是使用 queue 库中的队列了.创建一个被多个线程共享的 Queue 对象,这些线程通过使用 put() 和 get() 操作来向队列中添加或者删除元素. 例如: from queue import Queue from threading import Thread # A thread that produces data def producer(out_q):
-
Python使用文件锁实现进程间同步功能【基于fcntl模块】
本文实例讲述了Python使用文件锁实现进程间同步功能.分享给大家供大家参考,具体如下: 简介 在实际应用中,会出现这种应用场景:希望shell下执行的脚本对某些竞争资源提供保护,避免出现冲突.本文将通过fcntl模块的文件整体上锁机制来实现这种进程间同步功能. fcntl系统函数介绍 Linux系统提供了文件整体上锁(flock)和更细粒度的记录上锁(fcntl)功能,底层功能均可由fcntl函数实现. 首先来了解记录上锁.记录上锁是读写锁的一种扩展类型,它可用于有亲缘关系或无亲缘关系的进程间
-
Python中使用threading.Event协调线程的运行详解
threading.Event机制类似于一个线程向其它多个线程发号施令的模式,其它线程都会持有一个threading.Event的对象,这些线程都会等待这个事件的"发生",如果此事件一直不发生,那么这些线程将会阻塞,直至事件的"发生". 对此,我们可以考虑一种应用场景(仅仅作为说明),例如,我们有多个线程从Redis队列中读取数据来处理,这些线程都要尝试去连接Redis的服务,一般情况下,如果Redis连接不成功,在各个线程的代码中,都会去尝试重新连接. 如果我们想
-
python并发编程之线程实例解析
常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程) 这些线程将由操作系统来全权管理.线程一旦启动,将独立执行直到目标函数返回.可以通过查询 一个线程对象的状态,看它是否还在执行t.is_alive() t.join() 可以把一个线程加入到当前线程,并等待它终止 Python解释器在所有线程都终止后才继续执行代码剩余的部分 daemon 对于需要长时间运行的线程或者需要一直运行的后台任务,可以用后台线程(也称
-
wxpython多线程防假死与线程间传递消息实例详解
wxpython中启用线程的方法,将GUI和功能的执行分开. 网上关于python多线程防假死与线程传递消息是几年前的,这里由于wxpython和threading模块已经更新最新,因此给出最新修改代码,能在2017年最新版的python和模块中运行. 原来的publisher()和callafter都无法使用. 修改后的代码. import time import wx from threading import Thread from wx.lib.pubsub import pub cla
-
Python 使用生成器代替线程的方法
问题 你想使用生成器(协程)替代系统线程来实现并发.这个有时又被称为用户级线程或绿色线程. 解决方案 要使用生成器实现自己的并发,你首先要对生成器函数和 yield 语句有深刻理解. yield 语句会让一个生成器挂起它的执行,这样就可以编写一个调度器, 将生成器当做某种"任务"并使用任务协作切换来替换它们的执行. 要演示这种思想,考虑下面两个使用简单的 yield 语句的生成器函数: # Two simple generator functions def countdown(n):
-
python基于watchdog库全自动化监控目录文件
楔子 有些时候我们需要对一个目录进行监控,检测其内部是否有文件的新增.删除.以及每个文件的内容是否发生变化,这个时候如果是你的话,你会选择怎么做呢? 显然也是一个比较麻烦的工作,倒不是说难,主要是比较繁杂.但万幸的是,已经有一个第三方包watchdog帮我们完美地实现了这一点,所以这就是Python啊,想做什么都有现成的. 那么下面就来看一下它的用法,当然要先安装.直接:pip install watchdog即可. 使用方法 在我的桌面上有一个空目录test,一会儿我们对这个目录做的操作都会体
随机推荐
- 分享使用AngularJS创建应用的5个框架
- Java中关于XML的API
- ExtJS 2.0实用简明教程 之ExtJS版的Hello
- HttpClient基础解析
- 详解Java反射实现Aop代理
- Swift语言中字符串相关的基本概念解析
- JavaScript常用脚本汇总(二)
- BootStrap Datepicker 插件修改为默认中文的实现方法
- asp.net截屏功能实现截取web页面
- Java正则表达式(匹配、切割、替换、获取)等方法
- python对数组进行反转的方法
- jsp response.sendRedirect不跳转的原因分析及解决
- PHP中类属性与类静态变量的访问方法示例
- java编写简单的ATM存取系统
- PHP伪造referer实例代码
- jQuery下拉友情链接美化效果代码分享
- jQuery实现鼠标单击网页文字后在文本框显示的方法
- 风吟的小型JavaScirpt库 (FY.JS).
- Android中的WebView详细介绍
- wince禁止程序标题栏上的退出按钮示例