Python同步机制(semaphore,event,queue)
前言
在Python中的线程锁和Condition源码分析二文的基础之上,对Python多线程数据同步时可能用到的Semaphore、Event、Queue做了一些粗略分析。
Semaphore
从一个小demo入手,要求:让子线程完成打印数字0-8的任务,并且同一时刻,仅允许有三个子线程存在。代码实现如下:
import time
import threading
def print_num(num):
print("this is {}".format(num))
time.sleep(1)
sema.release() # 释放锁
if __name__ == "__main__":
sema = threading.Semaphore(3) # 实例一个信号锁,并设置计数器为3(最大线程数为3)
for i in range(9):
sema.acquire() # 上锁
t = threading.Thread(target=print_num, args=(i,)) # 让线程执行打印数字