Python中的进程隔离

时间:2014-01-21 16:10:44

标签: python segmentation-fault multiprocessing isolation

我知道使用subprocess模块来隔离可能会出现段错误的函数。这有效:

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 个答案:

答案 0 :(得分:1)

您提到您正在使用共享队列。注意the docs of Process.terminate中的警告(通过段错误终止是类似的情况):

  

警告:如果关联进程使用的是此方法,则使用此方法   管道或队列然后管道或队列容易被破坏   其他过程可能无法使用。同样,如果过程有   获得锁定或信号量等,然后终止它是负责任的   导致其他进程陷入僵局。