我刚接触 Python (2.7) 中的多处理。
我尝试运行以下代码:
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=<b>func(10)</b>).start()
这意味着 Process 永远不会被赋予 func,它被赋予 func(10) 的结果 因为 Python 首先 从左到右评估参数,然后将这些评估的结果传递给外部函数(这里是 Process(..) 调用)。
为了让子进程评估函数,你应该这样写:
Process(target=<b>func,args=(10,)</b>).start()
现在您传递一个对func 函数的引用,并提供一个参数元组args子进程将调用该函数。然后子进程将调用 func(10) 本身(另一个子进程将几乎同时对 func(1) 执行相同的操作)。
