[英]Python Synchronization Multiprocessing Lock
我已經經歷了(該SO線程)[ 使用Python的多處理模塊的同步問題,但未提供答案。
以下代碼:-
rom multiprocessing import Process, Lock
def f(l, i):
l.acquire()
print 'hello world', i
l.release()
# do something else
if __name__ == '__main__':
lock = Lock()
for num in range(10):
Process(target=f, args=(lock, num)).start()
如何使流程按順序執行? 我想按住一個鎖幾秒鍾,然后松開它,然后將P1和P2移入鎖中,然后P2向前移動,P3移開該鎖。 我將如何按順序執行流程?
聽起來您只是想延遲每個后續過程的開始。 在這種情況下,可以使用multiprocessing.Event
延遲啟動主進程中的下一個子進程。 只需將事件傳遞給孩子,然后讓孩子在完成Event
之前set
Event
,然后再開始下一個孩子就應該運行。 主進程可以wait
該Event
,並在發出信號后將其clear
,然后啟動下一個子進程。
from multiprocessing import Process, Event
def f(e, i):
print 'hello world', i
e.set()
# do something else
if __name__ == '__main__':
event = Event()
for num in range(10):
p = Process(target=f, args=(event, num))
p.start()
event.wait()
event.clear()
這不是鎖的目的。 您的代碼體系結構對您的用例不利。 我認為您應該將代碼重構為:
from multiprocessing import Process
def f(i):
# do something here
if __name__ == '__main__':
for num in range(10):
print 'hello world', num
Process(target=f, args=(num,)).start()
在這種情況下,它將按順序打印,然后異步處理其余部分
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.