# coding: utf-8
import threading
import time
def fun(semaphore, num):
print("Thread %d is running." % num)
time.sleep(3)
# 释放信号量,信号量加一
semaphore.release()
# 再次释放信号量,信号量加一,这是超过限定的信号量数目,这时会报错ValueError: Semaphore released too many times
semaphore.release()
if __name__=='__main__':
# 初始化信号量,数量为2,最多有2个线程获得信号量,信号量不能通过释放而大于2
semaphore = threading.BoundedSemaphore(2)
# 运行4个线程
for num in range(4):
# 获得信号量,信号量减一
semaphore.acquire()
t = threading.Thread(target=fun, args=(semaphore, num))
t.start()
转载:https://blog.csdn.net/a349458532/article/details/51589460
2. 进程池创建的进程之间的通信
from multiprocessing import Manager,Pool
import time
def writer(q):
for i in "we":
print("开始写入",i)
q.put(i)
def reader(q):
time.sleep(3)
for i in range(q.qsize()):
print("得到消息",q.get())
if __name__ == "__main__":
print("主进程启动")
q = Manager().Queue()
po = Pool(3)
for i in range(5):
po.apply_async(writer,(q,))
po.apply_async(reader,(q,))
po.close()
po.join()