Python multiprocessing测试代码串行运行无并行效果如何排查?
问题原因
该问题属于代码编写错误,和PyCharm环境限制无关,核心错误点如下:
multiprocessing.Process的target参数需要接收函数对象本身,你代码中写的target=proc1()会直接在主进程中同步执行proc1函数,等函数完全运行结束后才会将返回值传给target参数,同理创建p2进程时也会先同步执行完proc2函数,最后启动的两个进程实际没有绑定正确的执行逻辑,你看到的串行输出是主进程同步调用两个函数的结果,多进程逻辑完全没有生效。- 额外注意:你的主文件命名为
multiprocessing.py,和Python标准库的multiprocessing模块重名,后续可能会触发导入模块异常,建议修改为其他不冲突的名称,比如mp_demo.py。
修复方案
修改主文件中进程实例化的代码,去掉target参数后函数的括号,传入函数对象本身即可,修改后的代码示例:
import multiprocessing import os def proc1(): os.system('python proc1.py') def proc2(): os.system('python proc2.py') if __name__ == "__main__": p1 = multiprocessing.Process(target=proc1) p2 = multiprocessing.Process(target=proc2) p1.start() p2.start() # 可选添加join方法,等待子进程全部运行结束后再退出主进程 p1.join() p2.join()
修改完成后运行即可看到两个进程的打印内容交错输出,符合并行运行的预期。
内容的提问来源于stack exchange,提问作者balu
相关产品推荐
相关产品推荐

