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
相关产品推荐
相关产品推荐

