2017-02-10 39 views
0

我正在創建一個類multiprocessing.Process。 當進行一些測試時,我注意到當start()被調用時,進程沒有開始。 經過一些測試後,似乎只有在__main__模塊中執行了2行代碼之後,進程纔會啓動。在兩行代碼之後開始的Python進程

舉個例子

import multiprocessing 

class Test(multiprocessing.Process): 
    def __init__(self, *args, **kwargs): 
     super(Test, self).__init__(*args, **kwargs) 
     print('created') 

    def run(self, *args, **kwargs): 
     super(Test, self).run(*args, **kwargs) 
     print('running') 

sample = Test() 
>>> created 
sample.start() 
pass # Did not start yet 
pass # Will start after this 
>>> running 

我已經在不同的平臺進行了測試,它工作正常那裏。 我正在運行Windows 10,Python 3.5.2。 sys.version的輸出是'3.5.2 |Continuum Analytics, Inc.| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]'

+0

你是否總是從python交互式會話運行?在執行代碼作爲命令行中的腳本時,它們是否一樣? – cdarke

+0

無論是來自交互式會話,腳本還是導入模塊,它總是顯得相同。 – DeepHorizons

回答

0

衆所周知,多處理在windows和linux下的行爲是不同的。通過其他平臺你的意思是Linux?多處理分支(與fork())在linux中的一個新進程和子進程獲取所需的所有變量和信息的副本,其中Windows爲每個進程生成一個python解釋器的新副本。有一個很好的答案在這裏解釋它: Python Multiprocess diff between Windows and Linux

所以要補救,確保所有全局變量顯式傳遞給使用共享內存的子進程。查看多處理文檔: https://docs.python.org/dev/library/multiprocessing.html#sharing-state-between-processes瞭解更多信息。

相關問題