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

向ProcessPoolExecutor提交任务时类方法未被调用的问题

ProcessPoolExecutor类方法任务无输出问题修复

可运行的修复后代码

import time
from concurrent.futures import ProcessPoolExecutor

# 其他模块文件
class MyClass:
    def __init__(self):
        pass

    def run(self, secondsToSleep):
        print("start running...", flush=True)
        time.sleep(secondsToSleep)
        return "执行完成"

# 主文件
def main():
    obj = MyClass()

    with ProcessPoolExecutor(max_workers=5) as executor:
        # 传参不需要套元组,直接传入参数值即可
        future = executor.submit(obj.run, 10)
        # 获取执行结果,主动捕获子进程异常
        print(future.result())
        # with上下文会自动执行shutdown(wait=True),不需要手动调用

if __name__ == "__main__":
    main()

问题原因

  • 传参格式错误:executor.submit传入任务参数时不需要额外套一层元组,原代码传入(10,)相当于给run方法传入了一个元组类型的参数,执行time.sleep时会触发TypeError,子进程直接终止,自然不会执行到输出逻辑。
  • 未捕获子进程异常:子进程运行时抛出的异常不会默认打印到主进程控制台,必须调用future.result()才能拿到异常信息,原代码没有做异常捕获,无法感知子进程运行报错。
  • 缺少依赖导入:代码中使用了time.sleep但没有导入time模块,属于基础语法错误,会直接终止子进程运行。
  • Windows平台缺少入口保护:Windows系统下Python多进程必须加if __name__ == "__main__":入口保护,否则子进程启动时会重复导入主模块,导致进程启动逻辑异常。
  • 输出缓冲问题:print默认会开启输出缓冲,没到缓冲阈值不会主动输出到控制台,加上flush=True可以强制立即刷出内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:36:02