如何实现带不同参数的同一循环函数多进程并发执行?
问题分析与解决方案
原代码的核心问题
- 错误的进程目标参数传递:原代码中
Process(target=func(1).start())直接执行了func(1),而func是无限循环函数,程序会一直卡在这个函数的执行中,根本无法走到创建第二个进程的步骤。Process的target参数需要传入函数对象,而非函数执行后的结果。 - 缺少多进程入口保护:在Python多进程实现中(尤其是Windows平台),必须用
if __name__ == '__main__':包裹进程启动代码,否则会导致子进程重复执行整个脚本,引发异常或无法正常并发。 - 冗余的循环条件:
while 2 - 1 > 0完全等价于while True,写法冗余且可读性差。
修正后的可行代码
from multiprocessing import Process def func(x): while True: print("func:", x) if __name__ == '__main__': p1 = Process(target=func, args=(1,)) p2 = Process(target=func, args=(2,)) p1.start() p2.start()
关键修正点说明
- 正确传递target和参数:
target=func传入函数对象,args=(1,)指定函数的参数(注意元组结尾的逗号,即使只有一个参数也不能省略)。 - 添加入口保护:
if __name__ == '__main__':确保只有主进程会执行进程创建和启动的代码,避免子进程重复初始化。 - 简化循环条件:用
while True替代冗余的条件,提升代码可读性。
运行上述代码后,两个子进程会并发执行,随机交替输出func: 1和func: 2。
内容的提问来源于stack exchange,提问作者Kankan2000
相关产品推荐
相关产品推荐

