码迷,mamicode.com
首页 > 系统相关 > 详细

多进程+信号量Semaphore

时间:2017-11-21 01:01:38      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:map   from   tar   imp   例子   indent   semaphore   进入   pac   

通过下面一个例子进行理解。

from multiprocessing import Process
from multiprocessing import Semaphore
import datetime
import time
import multiprocessing

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

if __name__ == "__main__":
    s = multiprocessing.Semaphore(2)
    for i in range(5):
        p = multiprocessing.Process(target = worker, args=(s, i*2))
        p.start()

运行结果:

技术分享图片技术分享图片
分析:
p = multiprocessing.Process(……)定义了五个进程,p.start五个进程并行,造成如图的结果是信号量原因。
s = multiprocessing.Semaphore(2)定义了信号量最大为2,release: +1 acquire: -1
22:41:30
第一步,五个进程并发执行,进程1执行并等待0s,S-1=1
第二步,五个进程并发执行,进程2执行并等待2s,S-1=0
第三步,因为进程1执行了,并且等待时间为0,而进程2需要等待2s。所以这步必定是进程1执行,并且进程1执行完毕,而信号量+1且进入非堵塞。
第四步,进程2进入等待2s,所以只剩下三个进程3、4、5并行,进程4执行并等待6s,S-1=0
22:41:32
第五步,进程2等待2s完毕,进程2执行,S+1=1
第六步,进程4等待中,只剩下两个进程3、5并行,进程3执行并等待4s,S-1=0
22:41:36
第七步,进程4等待的是6s,进程3是4s,所以进程3执行,S+1=1
第八步,进程4等待,进程5执行并等待8s,S-1=0
第九步,进程4执行,S+1=1
22:41:44
第十步,进程5执行,S-1=0
技术分享图片

多进程+信号量Semaphore

标签:map   from   tar   imp   例子   indent   semaphore   进入   pac   

原文地址:http://www.cnblogs.com/kaiho/p/7868838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!