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

Python使用multiprocessing多进程运行代码无输出的问题咨询

问题根因及解决方案

1. 缺失多进程入口保护(最常见触发原因)

Windows、macOS 平台下 Python 的 multiprocessing 默认使用 spawn 模式启动子进程,该模式下子进程会重新导入整个主模块代码,如果没有把顶层执行逻辑放在 if __name__ == '__main__' 判断块内,子进程导入时会重复执行实例化、启动进程的逻辑,最终无法执行预期的run方法,也不会产生输出。

2. 输出缓冲问题

部分场景下子进程的print输出会被系统缓存,没有即时刷新到终端,也会导致看不到预期输出。


修正后可正常运行的代码

import multiprocessing as mp

class A:
    def __init__(self, num_workers=mp.cpu_count()):
        self.num_workers = num_workers
        self.x = 5
    
    def process(self):
        workers = []
        for i in range(self.num_workers):
            workers.append(B(self.x))
        for worker in workers:
            worker.start()
        for worker in workers:
            worker.join()

class B(mp.Process):
    def __init__(self, val):
        mp.Process.__init__(self)
        self.val = val
        
    def square(self):
        # 增加flush=True强制刷新输出缓冲,避免输出滞留缓存
        print(self.val * self.val, flush=True)
    
    def run(self):
        self.square()

# 必须加入口保护,仅主模块执行时才运行启动逻辑
if __name__ == '__main__':
    a = A()
    a.process()

多线程改多进程额外注意事项

  • 多进程之间默认不共享全局变量、实例属性,原多线程逻辑中靠共享变量传值的部分,需要改用mp.Queue、mp.Manager、管道或者共享内存实现
  • 传递给进程的参数必须是可序列化(支持pickle)的,不可序列化的对象无法跨进程传递
  • 进程创建开销远大于线程,不要创建远多于CPU核心数的工作进程,避免频繁上下文切换降低性能

内容的提问来源于stack exchange,提问作者MAN-MADE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:03