py并发_Semaphore笔记

Semaphore

Semaphore是一种有限资源的进程同步管理机制,就好比今天去银行进行业务办理,所有的办理业务的人员都会拿到一个号码,而后这个号码会被运营的业务窗口进行叫号,被叫到号办理者就可以获得当前银行处理的业务操作能力。

Semaphore(信号量)类本质上是一种带有计数功能的进程同步机制(“acquire()”方法为减少计数,“release()”方法为增加计数),当可用信号量的计数为0时,则意味着后续进程将被阻塞。

有限资源的有序利用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# coding : UTF-8
import multiprocessing,time
def worker(sema): # 进程的处理函数
if sema.acquire(): # 获取信号量,如果没有可用信号量则进入到阻塞等待
print("[%s]进程开始进行业务办理" % (
multiprocessing.current_process().name)) # 输出提示信息
time.sleep(2) # 模拟一下业务办理时间
sema.release() # 释放资源

def main(): #主函数
sema = multiprocessing.Semaphore(3) #只允许有3个进程并发执行
job_process = [multiprocessing.Process(target=worker,
args=(sema,),
name="业务客户 - %s" % item)
for item in range(10)]
for process in job_process:
process.start()
for process in job_process:
process.join()
if __name__ == "__main__":
main()

[业务客户 - 0]进程开始进行业务办理
[业务客户 - 1]进程开始进行业务办理
[业务客户 - 2]进程开始进行业务办理
[业务客户 - 3]进程开始进行业务办理
[业务客户 - 4]进程开始进行业务办理
[业务客户 - 5]进程开始进行业务办理
[业务客户 - 8]进程开始进行业务办理
[业务客户 - 7]进程开始进行业务办理
[业务客户 - 6]进程开始进行业务办理
[业务客户 - 9]进程开始进行业务办理

进程已结束,退出代码0

注:每两秒三个进程执行,资源得到了最大化地利用


py并发_Semaphore笔记
https://blog.wangxk.cc/2020/02/01/py并发-Semaphore笔记/
作者
Mike
发布于
2020年2月1日
许可协议