簡體   English   中英

如何避免使用Pythons多處理在分叉進程中加載​​父模塊

[英]How to avoid loading a parent module in a forked process with Pythons multiprocessing

當您使用Python的multiprocessing處理創建進程Pool時,這些進程將fork和父進程中的全局變量將顯示在子進程中,如下面的問題所示:

如何限制多處理過程的范圍?

這似乎包括導入的模塊。 這對於__init__中有副作用的模塊來說是一個問題。 Tensorflow就是這樣一個模塊,只要它導入它就會嘗試為GPU分配內存。 這會導致子進程崩潰,因為父進程已經執行了該操作。

有沒有一種好方法可以避免分叉過程中的tensorflow模塊加載?

Ubuntu上的Python 2.7(posix)

經過大量調試后,我意識到我的問題陳述不夠充分。 問題是我在其中一個子進程中加載​​了tensorflow(我忘了!)和只使用CPU而不是GPU的子進程。 我被迫更改環境變量以禁用子進程上的CUDA:

os.environ['CUDA_VISIBLE_DEVICES'] = ''
p = multiprocessing.Pool(processes=4)
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

除了David Parks的自我回答之外,在導入TensorFlow或可以被os.fork()破壞的模塊之前創建Pool和worker實例更安全。

暫無
暫無

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

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