[英]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.