Python同步多处理锁

时间:2014-08-27 06:50:32

标签: python multiprocessing

我已经完成了(这个SO线程)[Synchronization issue using Python's multiprocessing module但它没有提供答案。

以下代码: -

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将锁定除外。我如何按顺序执行流程。?

2 个答案:

答案 0 :(得分:0)

听起来你只想延迟每个连续过程的开始。如果是这种情况,您可以使用multiprocessing.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()

答案 1 :(得分:-1)

这不是锁的目的。您的代码体系结构对您的用例不利。我认为你应该重构你的代码:

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()

在这种情况下,它将按顺序打印,然后将异步执行剩余部分

相关问题