簡體   English   中英

使用python多處理庫讓父進程在子進程之前返回

[英]Let parent process return before child process using python multiprocessing library

當一個人使用python從多處理庫創建Processes時,父進程會等待其子進程返回,然后再返回。 實際上,文檔建議加入所有子級。 但是我想讓父項子項處理完成之前返回。

有什么辦法可以“分離”子進程。

我知道使用subprocess.Popen可以創建分離的子進程,但是我想使用多處理庫中的功能,例如隊列,鎖等。

我舉了兩個例子來說明差異。

第一個示例使用多處理庫。 調用此腳本時,它將打印父消息,等待5秒鍾,打印子消息,然后才返回。

# Using multiprocessing, only returns after 5 seconds
from multiprocessing import Process
from time import sleep, asctime

def child():
    sleep(5.0)
    print 'Child end reached on', asctime()

if __name__ == '__main__':
    p = Process(target = child)
    p.start()
    # Detach child process here so parent can return.
    print 'Parent end reached on', asctime()

第二個示例使用subprocess.Popen。 調用此腳本時,它將打印父消息,返回(!!!),並在5秒鍾后打印子消息。

# Using Popen, returns immediately.
import sys
from subprocess import Popen
from time import sleep, asctime

def child():
    sleep(5)
    print 'Child end reached on', asctime()

if __name__ == '__main__':
    if 'call_child' in sys.argv:
        child()
    else:
        Popen([sys.executable] + [__file__] + ['call_child'])
        print 'Parent end reached on', asctime()

如果我可以傳遞隊列,管道,鎖,信號量等,則第二個示例是可以接受的。

IMO,第一個示例也導致了更簡潔的代碼。

我在Windows上使用python 2.7。

只需從當前流程對象的_children集合中刪除流程對象,父流程將立即退出。

多重處理模塊管理私有集中的子進程,並在當前進程退出時將其加入。 如果您不關心兒童,則可以將其從集合中刪除。

process = multiprocessing.Process(target=proc_main)
multiprocessing.current_process()._children.discard(process)
exit(0)

暫無
暫無

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

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