You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下Python多进程Pipe异常:任务未全部执行求助

macOS上Python多进程Pipe搭配Pool的异常问题

在Intel芯片的macOS Monterey系统上,使用Python多进程的Pipe结合Pool时出现异常行为,Python 3.7和3.11版本运行以下代码均出现任务未全部执行的情况:

def _mp_job(nth, child):
    print("Nth is", nth)

if __name__ == "__main__":
    from multiprocessing import Pool, Pipe, set_start_method, log_to_stderr
    import logging, time

    set_start_method("spawn")
    logger = log_to_stderr()

    logger.setLevel(logging.DEBUG)

    with Pool(processes = 10) as mp_pool:

        jobs = []
        for i in range(20):
            parent, child = Pipe()
            # child = None
            r = mp_pool.apply_async(_mp_job, args = (i, child))
            jobs.append(r)

        while jobs:
            new_jobs = []
            for job in jobs:
                if not job.ready():
                    new_jobs.append(job)
            jobs = new_jobs
            print("%d jobs remaining" % len(jobs))
            time.sleep(1)

问题表现

  • 程序进入无限循环,持续报告有任务未完成
  • 日志显示子进程执行失败:
    [DEBUG/SpawnPoolWorker-10] worker got EOFError or OSError -- exiting
    
  • 进一步调试发现,子工作进程取出任务反序列化参数时,反序列化Pipe的child连接端会触发ConnectionRefusedError,导致工作进程崩溃,任务从队列移除但未完成
  • 取消注释代码中的# child = None后,程序运行完全正常
  • 进程池数量越多越容易触发:设置2个进程时稳定,4个及以上就会出现问题(本机为6核,核数并非诱因)

疑问

是否存在明显的错误操作?还是这是Python在macOS上的平台特定Bug?

内容的提问来源于stack exchange,提问作者Sam Bayer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:40:32