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

Python如何创建非阻塞多进程?现有代码进程串行无法并行怎么解决

问题原因

你在初始化multiprocessing.Process实例时的传参方式错误:
target参数需要接收函数对象本身,但你写的target=work(data,k)会直接在主进程中同步调用work函数,等函数执行完成后才会将返回值(此处为None)传给target,等于子进程还没创建就已经把任务串行执行完了,自然没有并行效果。

修正方法

将函数本身传给target,函数的入参通过args参数(元组类型)传递即可,以下是完整可运行的修正代码:

import multiprocessing
import time
import random

def work(data,num):
    print(f"starts: {num}")
    if num == 0:
        time.sleep(5)
    else:
        # 模拟随机时长的重负载任务
        time.sleep(random.randint(1,3))
    print(f"ends: {num}")

if __name__ == '__main__':
    # 这里替换为你自己的data参数
    test_data = {}
    process_list = []
    # 要生成0、1、2三个进程的话range参数要设为3
    for k in range(0,3):
        # 核心修正:target传函数名,参数放args里
        p = multiprocessing.Process(target=work, args=(test_data, k))
        p.daemon = True
        p.start()
        process_list.append(p)
    # 等待所有子进程执行完成,避免主进程提前退出杀掉守护进程
    for p in process_list:
        p.join()

运行上述代码即可得到你预期的并行执行效果。

其他补充说明

  • 你原代码的缩进存在错误:work函数的定义不能放在if __name__ == '__main__'的缩进块内,否则子进程导入模块时无法找到该函数,会触发报错。
  • 原代码循环为range(0,2),只会生成k=0、k=1两个进程,如果你需要3个进程要修改为range(0,3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:00