多处理进程 class 可以从 IDLE 变为 运行

Can multiprocessing Process class be run from IDLE

多处理进程的基本示例 class 从文件执行时运行,而不是从 IDLE 执行。为什么会这样,能不能做到?

from multiprocessing import Process

def f(name):
    print('hello', name)

p = Process(target=f, args=('bob',))
p.start()
p.join()

是的。该函数中的以下工作 f 是 运行 在单独的(第三个)过程中。

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

但是,要查看 print 输出,至少在 Windows 上,必须像这样从控制台启动 IDLE。

C:\Users\Terry>python -m idlelib
hello bob

(在 2.x 上使用 idlelib.idle。)原因是 IDLE 运行s 用户代码在一个单独的进程中。当前 IDLE 进程和用户代码进程之间的连接是通过套接字进行的。 multiprocessing 完成的 fork 不会复制或继承套接字连接。当通过图标或资源管理器(在 Windows 中)启动 IDLE 时,打印输出无处可去。当使用 python(而不是 pythonw)从控制台启动时,输出会转到控制台,如上所示。