我是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
之前。
我很感激帮助理解我在这里可能缺少的东西。
答案 0 :(得分:5)
你写道:
Process(target=func(10)).start()
这意味着 Process
永远不会被赋予func
,因为Python func(10) 的结果>首先从左到右评估参数,然后将这些评估的结果传递给外部函数(这里是Process(..)
调用)。
为了让子进程评估函数,你应该把它写成:
Process(target=func,args=(10,)).start()
现在您传递对func
函数的引用,并提供参数元组args
,子进程将用于此调用该函数。然后子进程将调用func(10)
本身(而另一个子进程几乎同时对func(1)
执行相同的操作)。
答案 1 :(得分:1)
创建Process
时,target
应该只是没有参数或parantheses的函数名,然后添加args=(your args)
。例如:
Process(target=func, args=(10,)).start()
答案 2 :(得分:1)
使用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()
您可以使用更多过程来查看他们何时被调用以及何时完成。使用其他进程调用来查看它们的工作方式。