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

Python 3.6.8下multiprocessing.Pool.apply_async()无响应问题咨询

问题原因
  • apply_async 是异步非阻塞方法,你的代码仅完成了任务提交步骤,未添加等待任务执行的逻辑:with 代码块执行完毕后会立即销毁进程池,子进程还未启动或执行完成就被终止,因此没有输出也不会抛出错误。
  • MacOS平台Python 3.6.8默认使用fork作为多进程启动方法,存在系统兼容性问题,可能导致子进程执行异常;同时子进程的print输出默认存在I/O缓冲,进程被提前销毁时缓冲内容不会刷新到终端。
修复方案
  • 提交所有任务后添加等待逻辑:可以通过调用每个异步返回结果的get()方法,或先关闭进程池再调用join()方法阻塞等待所有任务执行完成
  • 手动设置多进程启动方法为spawn,适配MacOS系统的运行限制(Python 3.8及以后版本MacOS默认已使用该启动方法)
  • 打印内容时添加flush=True参数,禁用I/O缓冲,保证输出即时同步到终端
可正常运行的修复后代码
import time
import multiprocessing
from multiprocessing import Pool

def worker(sl):
    print(sl, flush=True)
    time.sleep(sl)
    return sl

if __name__ == '__main__':
    # 适配MacOS设置多进程启动方法
    multiprocessing.set_start_method('spawn')
    result_list = []
    with Pool(processes=3) as pool:
        for i in range(5, 30, 5):
            res = pool.apply_async(func=worker, args=(i,))
            result_list.append(res)
        # 等待所有任务执行完成并获取返回值
        for res in result_list:
            print(f"任务返回结果:{res.get()}", flush=True)

内容的提问来源于stack exchange,提问作者sathish j

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:15:04