在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上运行。我将其更正为多个工作线程中的进程。我的错误。我将其更正为多个工作线程中的进程。我的错。