如何在 Windows 上的 python 中启动一个进程?

Posted

技术标签:

【中文标题】如何在 Windows 上的 python 中启动一个进程?【英文标题】:how to start a process in python on windows? 【发布时间】:2021-11-27 13:35:55 【问题描述】:

我正在尝试使用python documentation 中的multiprocessing.Process 示例启动一个进程。

示例代码如下:

from multiprocessing import Process
import os

def info(title):
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

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

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

我希望控制台向我显示函数 f('bob') 的输出,但我只能看到 info('mainline') 的输出。

所以我认为这个过程甚至还没有开始??

我以前从未使用过多处理,我敢打赌这是我犯的一个愚蠢的错误。

我也尝试过设置启动方法multiprocessing.set_start_method('spawn')(见here),因为'spawn'似乎是windows唯一有效的方法。

但我只得到一个

RuntimeError: context has already been set

目前我认为,我无法启动该过程。

任何想法如何解决这个问题?

附:我正在使用 spyder 4.2.5 中的 Windows 10(也许这与 ipython 控制台有关?因为我听说过,这不是普通的 python 控制台)。

但是我在普通的python shell中也试过同样的例子,它也只显示了info('mainline')的输出。

【问题讨论】:

不是您问题的真正答案,但如果使用多处理,则可能值得使用标准控制台来运行 Python。几年前我会使用 IDLE,但我认为它并不特别喜欢线程/进程。 可能重复***.com/questions/1196074/… 您的代码使用标准 CPython 解释器 (v 3.8.9) 在 Windows10 上为我工作。 @Peter:是的,你是对的,当我从 cmd 运行脚本时,它可以工作。所以我想这真的是 spyder/ipython 的东西。感谢您的提示! :) 【参考方案1】:

已解决:通过从 cmd 运行脚本

【讨论】:

以上是关于如何在 Windows 上的 python 中启动一个进程?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 Python 2.6:如何使用“shell=True”参数终止 subprocess.Popen?

在 Windows 上的 CygWin 下调用 python 挂起

如何使用 python 脚本打开 Windows 10 应用程序?

PC 上的双启动 Windows-Android:如何以编程方式切换操作系统?

Windows 上的 Python 子进程:启动子进程“cmd.exe”并为其提供 bat 文件,停止主进程执行

如何在 Windows XP 上的 XMPP 上设置 Django