Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的代码没有生成两个进程?_Python_Python 3.x_Python Multiprocessing - Fatal编程技术网

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() 预期

我的代码没有生成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()
预期结果:创建了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:
块的保护之下。阅读文档。并搜索“主模块的安全导入”