簡體   English   中英

在Python中將進程作為子進程啟動

[英]Starting a process as a subprocess in Python

我正在編寫一個使用以下代碼的使用多個工作進程(預分叉模型)的程序。

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

我使用Windows。 我注意到,當我希望它們作為子流程啟動時,它們作為單獨的流程運行。 如何使它們成為主流程的子流程?

我不願意使用子流程模塊,因為它似乎適合運行外部流程(就我所使用的而言)。


更新 :Windows似乎不會將新進程作為子進程啟動。 Python在Windows中不支持getppid()(獲取父代的PID)。

您似乎在這里混淆術語。 子流程一個單獨的流程。 所創建的將是處理兒童程序的主要過程,在這個意義上是子進程。 如果要使用線程,請使用multithreading而不是multiprocessing ,但請注意,Python不會對多個線程使用多個內核/ CPU。

我不願意使用subprocess模塊,因為它似乎適合運行外部流程

對不起,我不明白這句話。

牆子流程是什么? 對我來說,它們是您主要流程的子流程。 這是我的示例並返回了輸出。

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個子流程附加到主流程...

簡短答案: http : //docs.python.org/library/threading.html

更長:我不明白這個問題,艾奇紐。 在典型的Unix模型中,一個進程只能啟動子進程子進程。 我有一種強烈的感覺,我們兩個人之間存在詞匯沖突,我不知道該如何去解決。 您似乎在想一個“內部過程”。 在任何語言或操作系統中,這是一個例子嗎?

我可以證明Python的子流程模塊已被廣泛使用。

您編寫了“ ...多個工作線程...”,您是否閱讀過此響應頂部第一行中提到的文檔?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM