【问题标题】:Can multiprocessing Process class be run from IDLE可以从 IDLE 运行多处理进程类吗
【发布时间】:2017-03-24 15:58:24
【问题描述】:

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

from multiprocessing import Process

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

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

【问题讨论】:

  • @MathBio 我已经用这个欺骗了另一个。这篇文章的答案是由 Python IDLE 的开发人员提供的,因此要优越得多。

标签: python multiprocessing python-idle


【解决方案1】:

是的。该函数中的以下工作 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 在单独的进程中运行用户代码。目前,IDLE 进程和用户代码进程之间的连接是通过套接字进行的。多处理完成的分叉不会复制或继承套接字连接。通过图标或资源管理器(在 Windows 中)启动 IDLE 时,打印输出无处可去。当从带有python(而不是pythonw)的控制台启动时,输出将进入控制台,如上所述。

【讨论】:

  • 我之前考虑过将“在控制台中运行”添加到空闲运行菜单中。我之前的用例,使用 Windows getch 和着色打印输出,是相当深奥的。从多进程查看打印输出的情况要少得多,并且需要使用printstatements 调试多进程代码。所以我正在提高这个添加的优先级。
猜你喜欢
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多