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之前。为什么?
一行10人在一个房间里,然后当你大喊“走”时,他们都必须穿过和走出单门。他们以什么顺序离开? – 2013-02-27 20:41:24
如果您希望进程顺序运行,请勿使用'multiprocessing'。您可以使用正确的同步原语强制进行顺序计算,但是为什么?只需在一个过程中一个接一个地运行它们。另一方面,如果你只是想按顺序获得_results_,那就很有道理,并且有办法做到这一点(如果你可以使用一个池而不是一个单独的进程,每个任务都是微不足道的;不平凡但仍然非常简单如果你不能)。 – abarnert 2013-02-27 20:59:12