簡體   English   中英

Python多重處理是否從父級復制所有模塊?

[英]Does Python Multiprocessing Copy All Modules From The Parent?

我注意到,我可以訪問子流程功能/目標之外的子流程中的功能和模塊。 所以我想知道當我在python中創建子進程時,它會復制當前進程中的所有內容嗎? 為什么我可以訪問子目標之外的功能和導入的模塊?

from multiprocessing import Process, Pipe

def test1():
         return "hello"

def simpleChildProcess( childPipe ):
       # simpleChildProcess can access test1 function
       foo = test1()
       childPipe.send( foo )

parentPipe, childPipe = Pipe()
childProcess = Process( target=simpleChildProcess, args=(childPipe,) )

childProcess.start()

print "Pipe Contains: %s" % parentPipe.recv()

在類似Unix的OS上, multiprocessing.Process 使用os.fork產生新的進程。 fork創建一個新進程,該進程是父進程的副本,並且分叉的進程從調用fork的位置恢復。

由於Windows缺少fork ,因此multiprocessing.Process啟動一個新的Python進程並導入調用模塊。 在Windows上, if __name__ == '__main__' ,則必須在內部調用Process ,以防止每次導入調用模塊時都重復調用Process (即使在Unix上, if __name__ == '__main__':包括在內,這也是一個好習慣,以防止您的代碼導致失控的進程生成)。

因此,子進程可以訪問由調用模塊定義的功能和模塊,直到調用Process 的點 (對於Unix)或在導入調用模塊之后(對於Windows)。

暫無
暫無

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

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