繁体   English   中英

Python多处理:进程无法启动

[英]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 1end 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)进行相同操作)。

创建Processtarget应仅是没有参数或括号的函数名,然后添加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM