Python多处理:进程不启动



我是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 1end 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 来查看它们何时被调用以及何时完成。使用其他进程调用查看它们的工作原理。

相关内容

  • 没有找到相关文章

最新更新