多线程/多进程同步之Event

标准库模块threading/multiprocessing中提供了一个类对象Event,也可以实现多线程/多进程间的同步。
Event实例对象管理着一个内部标志,通过改变这个内部标志的值,可以让一个
线程/进程给其它处于阻塞状态的线程/进程发送一个事件信号,从而唤醒这些线程/进程让它们转为运行状态。
Event的方法如下:
1,set(self)
将内部标志设置为True。
2,is_set(self)
判断内部标志是否被设置为True。
3,clear(self)
将内部标志设置为False。
4,wait(self, timeout=None)
当内部标志为False时,调用该方法的线程/进程会被阻塞。
直到另外一个线程/进程调用了方法set()将内部标志设置为True,被阻塞的线程/进程才会转为运行状态。

#【1】多线程同步之Event

from threading import Thread, Event, current_thread
import time

event = Event()
print(event.is_set())   # False

def do_sth():
    print('%s开始等待' % current_thread().getName())
    event.wait()
    print('%s结束等待' % current_thread().getName())

for i in range(3):
    Thread(target=do_sth).start()

time.sleep(2)

event.set()

#【2】多进程同步之Event

from multiprocessing import Process, Event, current_process
import time

event = Event()
print(event.is_set()) 

def do_sth():
    print('%d开始等待' % current_process().pid)
    event.wait()
    print('%d结束等待' % current_process().pid)

for i in range(3):
    Process(target=do_sth).start()

time.sleep(2)

event.set()

  

posted @ 2019-06-30 22:12  山的那一边  阅读(378)  评论(0)    收藏  举报