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

Python使用time.sleep时multiprocessing多进程不并行运行问题求解

问题根因

你之前猜测是time.sleep导致的串行执行,这个判断是错误的,问题完全出在Process对象的传参写法不符合规范:

  • 你编写的target=f('Tom')会直接在主进程中同步执行f('Tom')函数,等待函数执行完成(含10秒休眠)后,才会将函数的返回值(此处f无返回值,实际传的是None)赋值给target参数。相当于两次创建子进程前,已经在主进程串行执行了两次f函数,自然不会有并行效果。
  • 代码还存在两个额外问题:
    1. 未导入multiprocessing.Queue类,直接使用Queue()会触发名称错误
    2. f函数中没有任何向队列写入数据的逻辑,后续调用l1.get()、l2.get()会永久阻塞,无法得到返回结果。
修复方案

修改传参逻辑:给Process传target参数时仅传入函数名,函数的入参通过args参数(元组类型)传递,同时补全队列写入逻辑和导入语句,修正后的代码如下:

from multiprocessing import Process, Queue
import time

def f(name, q):
    res = f'hello {name}'
    print(res)
    time.sleep(10)
    q.put(res) # 把执行结果写入队列供主进程获取

if __name__ == '__main__': 
    # 上述判断是Windows系统下的强制要求,防止多进程启动时无限递归报错
    l1 = Queue()
    a = Process(target=f, args=('Tom', l1))
    a.start()

    l2 = Queue()
    b = Process(target=f, args=('Stock', l2))
    b.start()

    print(l1.get())
    print(l2.get())

修改后两个子进程会同时启动,总耗时约10秒即可完成全部执行,达到预期的并行效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:57:04