如何在Python函数内部正确启动并管理多进程?
正确实现方式
先明确你代码里的核心问题:
if __name__ == '__main__':不能放在函数内部,这个判断必须放在模块顶层,否则Windows系统下多进程启动时会触发重复导入逻辑,导致进程无法正常工作。- 函数定义存在语法错误,
def my_funct要补全括号写成def my_funct():。 - 需确保正确导入
multiprocessing模块的Process类。
完整的可运行代码示例:
from multiprocessing import Process def funct1(): # 编写funct1的业务逻辑 print("funct1 正在运行") def funct2(): # 编写funct2的业务逻辑 print("funct2 正在运行") def my_funct(): # 执行函数前置逻辑 print("my_funct 启动") # 创建进程实例 p1 = Process(target=funct1) p2 = Process(target=funct2) # 启动进程 p1.start() p2.start() # 这里编写你的后续业务代码 # 如果需要等待进程自然结束,建议用join()替代terminate()(terminate是强制终止) # p1.join() # p2.join() # 强制终止进程(根据实际需求选择使用) p1.terminate() p2.terminate() # 执行函数后置逻辑 print("my_funct 结束") return "处理结果" # 模块顶层的主程序入口,必须放在这里 if __name__ == '__main__': result = my_funct() print(result)
关键注意事项:
if __name__ == '__main__':放在模块最外层,是为了避免子进程导入当前模块时重复执行主程序逻辑,防止出现无限创建进程的异常。terminate()属于强制终止操作,若你的funct1和funct2是会自行结束的任务,优先使用join()等待进程自然完成,这样更安全稳定。- 确保
funct1和funct2能被子进程正常访问,脚本直接运行时无需额外处理,若作为模块导入则要保证函数的可见性。
内容的提问来源于stack exchange,提问作者cesar col
相关产品推荐
相关产品推荐

