线程间通信(一)
来源:互联网 发布:矩阵分解模型 编辑:程序博客网 时间:2024/05/17 01:26
Python提供了Event对象用于线程间的相互通信。实际上线程同步在一定程度上已经实现线程间的通信。线程同步是每次仅有一个线程对共享数据进行操作,其他线程则等待。而Event对象是由线程设置的信号标志,如果信号标志为真,则其他线程等待直到信号解除。
9.3.1 Event对象的方法
Event对象实现了简单的线程通信机制,它提供了设置信号、清除信号、等待等用于实现线程间的通信。
1.设置信号
使用Event对象的set()方法可以设置Event对象内部的信号标志为真。Event对象提供了isSet()方法来判断其内部信号标志的状态。当使用Event对象的set()方法后,isSet()方法返回真。
2.清除信号
使用Event对象的clear()方法可以清除Event对象内部的信号标志,即将其设置为假。当使用Event对象的clear()方法后,isSet()方法返回假。
3.等待
Event对象wait的wait方法只有在其内部信号为真时才会很快地执行完成并返回。当Event对象的内部信号标志为假时,则wait方法一直等到其为真时才返回。另外还可以向wait方法传递参数,以设定最长等待时间。
9.3.2 使用Event对象实现线程间通信
配合使用Event对象的几种方法可以实现进程间的简单通信。以下的event.py脚本即使用Event对象实现进程间的通信。
# -*- coding:utf-8 -*-
# file: event.py
#
import threading # 导入threading模块
class mythread(threading.Thread):
def _init_(self,threadname):
threading.Thread._init_(self,name = threadname)
def run(self):
global event # 使用全局Event对象
if event.isSet(): # 判断Event对象内部信号标志
event.clear() # 若已设置标志则清除
event.wait() # 调用wait方法
print self.getName()
else:
print self.getName()
event.set() # 设置Event对象内部信号标志
event = threading.Event() # 生成Event对象
event.set() # 设置Event对象内部信号标志
tl = []
for i in range(10):
t = mythread(str(i))
tl.append(t) # 生成线程列表
for i in tl:
i.start()
# 运行线程
运行脚本后输出如下所示。
1
0
3
2
5
4
7
6
9
8
- 线程间通信(一)
- 线程通信(一)
- Android线程间通信(一):Message
- Android线程间通信一
- Android线程间通信一
- Java 多线程(一)线程间的通信
- Java多线程编程核心技术---线程间通信(一)
- Adroid中线程间的通信(一)
- 进程\线程间通信学习笔记(一)
- Java线程通信 (一)
- Android线程管理(一)——线程通信(转载)
- Android线程管理(一)——线程通信
- Java之线程通信一
- 彻底明白Java的多线程-线程间的通信(一)
- 进程和线程间的通信方式总结-篇一(转载)
- Android之Activity ContentProvider Service Broadcast,线程间通信,AIDL(一)
- JAVA多线程-线程间通信(一)-等待/通知机制(wait/notify)
- python 线程间通信方法一:event 示例
- Session机制详解(jsp-servlet 技术)
- 捕捉用户向DataGridView的单元格输入不正确值时发生的错误
- secure crt 和samba中文
- Stream与String互相转换方法
- Asp对URL编码和解码
- 线程间通信(一)
- SQL Server XQuery 学习笔记(四)
- datagrid控件中添加了checkbox控件的使用
- again about gdk gtk
- 多线程编程
- SDK、JDK、JRE和JVM的关系总结
- Javascript的调试利器:Firebug使用详解收藏
- linux开机启动脚本的顺序
- 给大家分享一个创意的牛媒体:明镜天下(中国)传媒有限公司