繁体   English   中英

使用Python的多处理模块的同步问题

[英]Synchronization issue using Python's multiprocessing module

当我从Python的多处理模块页面运行以下代码时:

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    print 'hello world', i
    l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

有时我会得到无序的输出,例如:

hello world 0
hello world 1
hello world 2
hello world 4
hello world 3
hello world 6
hello world 5
hello world 7
hello world 8
hello world 9

请注意,在3之前先打印4,在5之前先打印6。为什么?

因为multiprocessing并行性 您的进程彼此同时运行,因此它们实际上可以任何顺序启动和结束。

锁定收购只是确保他们不要试图print 在同一时间 -但锁可以通过各种方法在任何随机顺序进行收购。 您创建的第一个进程很可能会获取它,因为该进程将更快地进行初始化,因此可能是第一个请求锁定的进程。 但是并不能保证一定要订购。

这取决于操作系统如何安排首先运行哪个操作系统,而您的锁定只能阻止多个操作系统同时运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM