在Python中将进程作为子进程启动

在Python中将进程作为子进程启动,python,Python,我正在编写一个程序,该程序使用多个工作进程和一个具有以下代码的预分叉模型 from multiprocessing import Process for i in range(0,3): Process(target=worker, args=(i,)).start() 我使用Windows。我注意到,当我希望它们作为子进程启动时,它们作为单独的进程运行。如何使它们成为主流程的子流程 我对使用子流程模块犹豫不决,因为它似乎适合运行我使用过的外部流程 更新:Windows似乎没有将新进

我正在编写一个程序,该程序使用多个工作进程和一个具有以下代码的预分叉模型

from  multiprocessing import Process
for i in range(0,3):
    Process(target=worker, args=(i,)).start()
我使用Windows。我注意到,当我希望它们作为子进程启动时,它们作为单独的进程运行。如何使它们成为主流程的子流程

我对使用子流程模块犹豫不决,因为它似乎适合运行我使用过的外部流程


更新:Windows似乎没有将新进程作为子进程启动。Python不支持Windows中的getppid get parent的PID。

您在这里似乎混淆了术语。子流程是一个单独的流程。所创建的进程将是程序的主进程的一部分,从这个意义上说是子进程。如果需要线程,则使用多线程而不是多处理,但请注意Python不会对多线程使用多核/CPU

我对使用子流程模块犹豫不决,因为它似乎适合运行外部流程


对不起,我不明白这句话。

你似乎把这里的术语弄糊涂了。子流程是一个单独的流程。所创建的进程将是程序的主进程的一部分,从这个意义上说是子进程。如果需要线程,则使用多线程而不是多处理,但请注意Python不会对多线程使用多核/CPU

我对使用子流程模块犹豫不决,因为它似乎适合运行外部流程

对不起,我不明白这句话。

简短回答:

我不明白这个问题,艾奇尼。在典型的Unix模型中,进程只能启动子进程。我有一种强烈的感觉,我们两人之间存在词汇冲突,我不知道如何解决。你似乎有一个类似于内在过程的想法;在任何语言或操作系统中都有这样的例子吗

我可以证明Python的子流程模块被广泛使用

你写。。。多个工作线程。。。您是否阅读了我在本回复顶部第一行中提到的文档?

简短回答:

我不明白这个问题,艾奇尼。在典型的Unix模型中,进程只能启动子进程。我有一种强烈的感觉,我们两人之间存在词汇冲突,我不知道如何解决。你似乎有一个类似于内在过程的想法;在任何语言或操作系统中都有这样的例子吗

我可以证明Python的子流程模块被广泛使用


你写。。。多个工作线程。。。您是否阅读了我在本回复顶部第一行中提到的文档?

您认为子流程是什么?对我来说,它们是主流程的子流程。这里是我的示例和返回的输出

import time, os
from  multiprocessing import Process

def worker():
    print "I'm process %s, my father is %s" % (os.getpid(), os.getppid())

print "I'm the main process %s" % os.getpid()
for i in range(0,3):
    Process(target=worker).start()
输出为:

I'm the main process 5897
I'm process 5898, my father is 5897
I'm process 5899, my father is 5897
I'm process 5900, my father is 5897

您有3个子流程连接到主流程…

您认为子流程是什么?对我来说,它们是主流程的子流程。这里是我的示例和返回的输出

import time, os
from  multiprocessing import Process

def worker():
    print "I'm process %s, my father is %s" % (os.getpid(), os.getppid())

print "I'm the main process %s" % os.getpid()
for i in range(0,3):
    Process(target=worker).start()
输出为:

I'm the main process 5897
I'm process 5898, my father is 5897
I'm process 5899, my father is 5897
I'm process 5900, my father is 5897

您有3个子进程连接到主进程…

我指定了您的代码。如果这是错误的,请随时回复,但请解释为什么这是正确的缩进。这对未来的回答者来说是一个巨大的帮助。我承认你的代码。如果这是错误的,请随时回复,但请解释为什么这是正确的缩进。如果你使用的是Python 3.x,你也可以尝试concurrent.futures,它隐藏了更多的手动线程。你确定Python在使用多线程时不使用多核吗?@Pih:如果一个线程在释放GIL的C扩展中做了大量工作,然后,它可以在单独的内核上与其他线程并行运行。但通常不会。检查。如果您使用的是Python3.x,您也可以尝试concurrent.futures,它隐藏了更多手动线程。您确定Python在使用多线程时不使用多核吗?@Pih:如果一个线程在释放GIL的C扩展中做了大量工作,那么它可能会在单独的核心上与其他线程并发运行。但通常不会。检查,哇。你的代码说明了一切。太糟糕了os.getppid在Windows.Wow上不起作用。你的代码说明了一切。太糟糕了,os.getppid不能在Windows上运行。我将其更正为多个工作线程中的进程。我的错误。我将其更正为多个工作线程中的进程。我的错。