Python高级(16)—多线程、多进程同步之Event

◎知识点

  1. 多线程同步之Event

  2. 多进程同步之Event


◎脚本练习

▽ 多线程同步之Event

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

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()


▽ 多进程同步之Event

"""
    标准库模块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,被阻塞的进程才会转为运行状态
"""

from multiprocessing import Process, Event, current_process
import time



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

if __name__ == '__main__':

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

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

    time.sleep(2)

    event.set()


◎脚本地址:https://github.com/anzhihe/learning/blob/master/python/practise/learn-python/python_senior/event.py

anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/5627.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注