簡體   English   中英

Python同步多處理鎖

[英]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 ,然后再開始下一個孩子就應該運行。 主進程可以waitEvent ,並在發出信號后將其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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM