【问题标题】:Process Isolation in PythonPython中的进程隔离
【发布时间】:2014-02-11 08:31:38
【问题描述】:

我知道使用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 库以防止出现段错误。我知道处理段错误的最佳方法是修复它们,但是这个库真的很大。

【问题讨论】:

    标签: python segmentation-fault multiprocessing isolation


    【解决方案1】:

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

    警告:如果在关联进程正在使用 管道或队列,则管道或队列可能会损坏,并且 可能无法被其他进程使用。同样,如果进程有 获得锁或信号量等,然后终止它很容易 导致其他进程死锁。

    【讨论】:

    • 谢谢!简化我的共享队列逻辑后,多处理方法按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多