Python Multiprocessing在for循环中启动进程后主循环阻塞如何解决
Python多进程并行不生效问题解决方案
核心错误原因
你创建子进程的代码存在参数传值错误,直接在主进程中提前执行了目标函数,没有将函数交给子进程运行:
Process构造方法的target参数要求传入函数对象本身,你写的target=combatAnalyis()加了括号,会立即在主进程中执行combatAnalyis函数,等待函数执行完成后才会继续往下走,自然没有并行效果。
修复方法
将创建Process的代码修改为如下形式即可:
# 仅需去掉target参数中函数名后的括号 p = Process(target=combatAnalyis) # 如果combatAnalyis需要传参,通过args参数传入元组即可,示例: # p = Process(target=combatAnalyis, args=(combatlog, ))
额外注意事项
- 如果你需要在主进程退出前等待所有子进程执行完成,可以在主循环结束后收集所有子进程对象,逐个调用
join()方法。 - 多进程内存空间相互隔离,子进程无法直接读取主进程中定义的
combatlog、othercombats等变量,如果需要传递数据要使用队列、管道等进程间通信工具。
内容的提问来源于stack exchange,提问作者Renze Koper
相关产品推荐
相关产品推荐

