Python 为什么我的代码没有生成两个进程?
我的代码没有生成2个进程,我也不知道为什么。我正在使用来自多处理python库的进程Python 为什么我的代码没有生成两个进程?,python,python-3.x,python-multiprocessing,Python,Python 3.x,Python Multiprocessing,我的代码没有生成2个进程,我也不知道为什么。我正在使用来自多处理python库的进程 import os from multiprocessing import Process def dummy(): while True: print(os.getpid()) p1 = Process(target=dummy()) p2 = Process(target=dummy()) p1.start() p2.start() p1.join() p2.join() 预期
import os
from multiprocessing import Process
def dummy():
while True:
print(os.getpid())
p1 = Process(target=dummy())
p2 = Process(target=dummy())
p1.start()
p2.start()
p1.join()
p2.join()
预期结果:创建了2个进程-在windows 7任务管理器中可见,并且我的代码打印了2个不同的进程id
实际结果:
只有一个python进程正在运行,只有一个进程id正在打印
3480
3480
3480
您的代码没有执行您认为它正在执行的操作。在第一行:
p1 = Process(target=dummy())
您正在调用dummy()
函数。如果你添加一些打印语句,你会发现你永远不会超过这一行。因为调用dummy()
改为这样做:
p1 = Process(target=dummy)
p2 = Process(target=dummy)
也就是说,不要调用dummy
,只传递函数对象。后来
p1.start()
(etc)将在一个新进程中调用dummy()
,这正是您想要的。当循环阻塞时,是否需要始终使用,如果uuu name\uuu=='uu main\uuuu':
进行多处理?如果没有代码,我会得到运行时错误:RuntimeErrorRuntimeError::在当前进程完成引导阶段之前,尝试启动新进程。这可能意味着您没有使用fork来启动子进程,并且忘记了在主模块中使用正确的习惯用法:
如果您在Windows上运行,那么您还需要将mp代码置于If uuuuuuu name\uuuuu==“\uuuuuu main\uuuuu:
块的保护之下。阅读文档。并搜索“主模块的安全导入”