python多进程信号量(Semaphore)

2,901次阅读
没有评论

python多进程信号量(Semaphore)

上一个Lock是控制资源的访问权限,谁拿到了锁才会去干活,信号量主要控制同时访问资源的进程的数量,比如生产饼干的任务一次只能两个人在车间里面干活,到点了这两个人撤了睡觉去了,在来两个人顶替,或者其中有个人临时有事也得找一个人来顶替干活。下面举个例子来说明

import multiprocessing
import time

def worker(s, i):
    s.acquire()
    print(multiprocessing.current_process().name + "acquire");
    time.sleep(i)
    print(multiprocessing.current_process().name + "release\n");
    s.release()

if __name__ == "__main__":
    s = multiprocessing.Semaphore(2)#信号量的参数设置为2,表示可以同时干活的有两个人
    for i in range(5):
        p = multiprocessing.Process(target = worker, args=(s, i*2))
        p.start()

输出

 

Process-1acquire
Process-1release

Process-2acquire
Process-3acquire
Process-2release

Process-5acquire
Process-3release

Process-4acquire
Process-5release

Process-4release
admin
版权声明:本站原创文章,由admin2018-04-22发表,共计640字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)