Semaphore是用来控制对共享资源的访问量,可以控制同一时刻进程的并发数量。
示例:
import multiprocessing
import time
def worker(s, i):
s.acquire() # 获得锁
print(time.strftime('%H:%M:%S'), multiprocessing.current_process().name + " 获得锁运行");
time.sleep(i)
print(time.strftime('%H:%M:%S'), multiprocessing.current_process().name + " 释放锁结束");
s.release() # 释放锁
if __name__ == "__main__":
s = multiprocessing.Semaphore(2)
for i in range(6):
p = multiprocessing.Process(target=worker, args=(s, 2))
p.start()
输出:
20:07:17 Process-1 获得锁运行
20:07:17 Process-2 获得锁运行
20:07:19 Process-1 释放锁结束
20:07:19 Process-3 获得锁运行
20:07:19 Process-2 释放锁结束
20:07:19 Process-4 获得锁运行
20:07:21 Process-3 释放锁结束
20:07:21 Process-5 获得锁运行
20:07:21 Process-4 释放锁结束
20:07:21 Process-6 获得锁运行
20:07:23 Process-5 释放锁结束
20:07:23 Process-6 释放锁结束
说明:multiprocessing.Semaphore(2)定义了同一时刻只能有2个进程在执行