多处理进程 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
)从控制台启动时,输出会转到控制台,如上所示。
多处理进程的基本示例 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
)从控制台启动时,输出会转到控制台,如上所示。