上下文
我需要在multiprocessing.ThreadPool中运行multiprocessing.Process.起初看起来很奇怪,但这是我发现处理segfault的唯一方法,因为我使用的是c ++共享库.如果追加了段错误,则该进程被终止,我可以检查process.exitcode并处理它.
问题
过了一会儿,当我试图加入这个过程时会出现死锁.
这是我的代码的简单版本:
import sys, time, multiprocessing
from multiprocessing.pool import ThreadPool
def main():
# Launch 8 workers
pool = ThreadPool(8)
it = pool.imap(run, range(500))
while True:
try:
it.next()
except StopIteration:
break
def run(value):
# Each worker launch it own Process
process = multiprocessing.Process(target=run_and_might_segfault, args=(value,))
process.start()
while process.is_alive():
sys.stdout.write('.')
sys.stdout.flush()
time.sleep(0.1)
# Will never join after a while, because of a mystery deadlock
process.join()
# Deals with process.exitcode to log errors
def run_and_might_segfault(value):
# Load a shared library …Run Code Online (Sandbox Code Playgroud)