在Python中以子进程启动一个进程

1 投票
3 回答
1036 浏览
提问于 2025-04-17 03:12

我正在写一个程序,这个程序使用多个工作进程(也就是预先分叉的模型),代码如下。

from  multiprocessing import Process
for i in range(0,3):
    Process(target=worker, args=(i,)).start()

我使用的是Windows系统。我发现这些进程是作为独立的进程运行的,而我希望它们能作为子进程启动。请问我该如何让它们成为主进程的子进程呢?

我对使用subprocess模块有些犹豫,因为我觉得这个模块主要是用来运行外部进程的(就我用过的情况来看)。


更新:看起来Windows并不会将新进程启动为子进程。Python在Windows上不支持getppid()(获取父进程的PID)。

3 个回答

1

简短回答:http://docs.python.org/library/threading.html

详细一点:我不太明白你的问题,aitchnyu。在典型的Unix系统中,一个进程能启动的只有子进程。我感觉我们之间可能有一些词汇上的误解,我不知道该怎么解释清楚。你似乎在想“内部进程”这样的东西;能给我举个例子吗,不管是哪个语言或操作系统?

我可以确认,Python的子进程模块被广泛使用。

你写到“...多个工作线程...” 你有没有看我在这条回复开头提到的文档?

3

你似乎对一些术语搞混了。子进程就是一个独立的进程。你创建的这些进程将会是你程序主进程的子进程,从这个意义上说,它们就是子进程。如果你想要使用线程,那就用multithreading,而不是multiprocessing,但要注意,Python在多个线程上不会利用多个核心或CPU。

我不太想用subprocess模块,因为它看起来更适合运行外部进程。

抱歉,我不太明白这句话的意思。

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个子进程与一个主进程连接...

撰写回答