[英]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.