2014-01-21 27 views
2

我知道使用subprocess模塊來隔離可能存在段錯誤的函數。這工作:Python中的進程隔離

import subprocess 
# Blocking for simplicity 
res = subprocess.check_output(["python", "c_library_wrapper.py", arg0, arg1, ...]) 

我試圖找出就是爲什麼multiprocessing不具有同樣的效果。這似乎沒有工作:

import multiprocessing 
from c_library_wrapper import f 
# Assume that f puts the return value into a shared queue 
p = multiprocessing.Process(target=f, args=(arg0, arg1, ...)) 
p.start() 
p.join() 

這是不是也創造了一個獨立的過程?我在這裏錯過了一個核心概念嗎?

背景:我正在隔離一個大的第三方C庫來防止段錯誤。我知道處理段錯誤的最好方法就是解決它們,但是這個庫真的是大。

回答

1

你提到你正在使用共享隊列。聽從在the docs of Process.terminate警告(通過段錯誤終止是類似的情況):

警告:如果在相關聯的過程是使用 管或隊列然後在管道或隊列使用這種方法容易變得損壞並且 可能會被其他進程無法使用。同樣,如果進程有 獲得鎖或信號量等,則終止它將導致其他進程死鎖。

+0

謝謝!在簡化我的共享隊列邏輯之後,多處理方法按預期工作。 – PattimusPrime