Python多处理:进程无法启动

时间:2017-07-21 12:09:41

标签: python process multiprocessing

我是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之前。

我很感激帮助理解我在这里可能缺少的东西。

3 个答案:

答案 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()

您可以使用更多过程来查看他们何时被调用以及何时完成。使用其他进程调用来查看它们的工作方式。