当我从 Python 的多处理模块 page 运行以下代码时:
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
请注意,4 在 3 之前打印,6 在 5 之前打印。为什么?
最佳答案
因为多处理
的重点是并行。您的进程彼此同时运行,因此它们实际上可以按任何顺序启动和完成。
锁定获取仅确保它们不会尝试同时打印
- 但该锁定可以由各个进程以任何随机顺序获取。它更有可能被您创建的第一个进程获取,因为该进程将更快地完成初始化,因此很可能是第一个请求锁的进程。但无法保证订单。
关于python - 使用Python的多处理模块的同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121859/