在Python中以子进程启动一个进程
我正在写一个程序,这个程序使用多个工作进程(也就是预先分叉的模型),代码如下。
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个子进程与一个主进程连接...