Python多进程调用导入函数时重复执行导入脚本问题求助
解决multiprocessing调用导入函数时重复执行被导入脚本的问题
问题根源
在Windows系统中,multiprocessing默认使用spawn方式启动子进程。这种方式会创建全新的Python解释器实例,重新导入主进程中用到的所有模块。你的plus.py脚本里存在顶级可执行代码(print('plus run')),这段代码会在模块被导入时自动执行,因此每次创建子进程都会触发这段代码,导致重复输出。
Linux/macOS默认使用fork方式启动子进程,不会重新导入模块,因此不会出现该问题,但为了跨平台兼容性,建议统一做如下处理。
解决方案
将plus.py中的顶级可执行代码放入if __name__ == "__main__":代码块中。这个条件判断只有在直接运行该脚本时才会成立,模块被其他脚本导入时不会执行块内代码。
修改后的plus.py代码
"""修改后的plus脚本""" def plus(): print(2+3) return 2+3 if __name__ == "__main__": # 仅直接运行该脚本时执行 print('plus run')
修改后的运行结果
test 5 5 5 5
内容的提问来源于stack exchange,提问作者Chris Botos
相关产品推荐
相关产品推荐

