[英]Python multiprocessing : processes do not start
我是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
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来查看它们的调用时间和结束时间。 使用其他流程调用来查看其工作方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.