我是Python(2.7(中multiprocessing
新手。
我尝试运行以下代码段:
from time import sleep
from multiprocessing import Process
import multiprocessing
def func(x):
print("start %s"%(x))
sleep(x)
print("end %s"%(x))
return
if __name__ == '__main__':
Process(target=func(10)).start()
Process(target=func(1)).start()
这将返回以下内容:
start 10
end 10
start 1
end 1
虽然start 1
和end 1
应该先验地出现在end 10
.
我将不胜感激,以帮助了解我在这里可能缺少什么。
你写道:
Process(target=func(10)).start()
这意味着Process
永远不会被func
给出,它被给出func(10)
的结果,因为 Python首先从左到右计算参数,然后将这些评估的结果传递给外部函数(这里是Process(..)
调用(。
为了让子进程计算函数,你应该这样写它:
Process(target=func,args=(10,)).start()
现在,传递对func
函数的引用,并提供子进程将用来调用函数的参数元组args
。然后子进程将调用func(10)
本身(另一个子进程几乎同时对func(1)
执行相同的操作(。
创建Process
时,target
应该只有函数名,没有参数或参数,然后添加args=(your args)
。例如:
Process(target=func, args=(10,)).start()
使用 Willem Van Onsem 回答:
from time import sleep
from multiprocessing import Process
import multiprocessing
def func(x, called_from):
print("start %s from %s"%(x, called_from))
sleep(x)
print("end %s from %s"%(x, called_from))
return
if __name__ == '__main__':
Process(target=func, args=(10,'1')).start()
Process(target=func, args=(1,'2')).start()
你可以使用大量 Process more 来查看它们何时被调用以及何时完成。使用其他进程调用查看它们的工作原理。