小编Had*_*oke的帖子

大量的多处理.进程导致死锁

上下文

我需要在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)

python multithreading deadlock multiprocessing

4
推荐指数
1
解决办法
1900
查看次数