Python3多进程疑问:为何仅输出aaa而非预期的交替内容?
问题分析与修复方案
嘿,我来帮你揪出代码里的问题——你遇到的情况是因为代码里有两个关键错误,咱们拆解来看:
1. 进程目标函数传参错误
你写的multiprocessing.Process(target=aaa())这里犯了个常见的小错误:加了括号()。当你给target传aaa()时,Python会立刻在主进程里执行这个函数,而aaa()是个死循环,所以主进程直接卡在打印aaa的循环里,根本没机会去创建第二个进程p2,更别说启动它了。
正确的做法是传递函数本身(不要括号),这样multiprocessing才会把这个函数作为子进程的执行目标:
p1 = multiprocessing.Process(target=aaa) p2 = multiprocessing.Process(target=bbb)
2. 进程方法调用缺少括号
你写的p1.start和p1.join只是引用了进程对象的方法,并没有实际调用它们。这些都是需要执行的方法,必须加上括号()才能生效:
p1.start() p2.start() p1.join() p2.join()
修复后的完整代码
import multiprocessing def aaa(): while True: print('aaa') def bbb(): while True: print('bbb') if __name__=='__main__': p1 = multiprocessing.Process(target=aaa) p2 = multiprocessing.Process(target=bbb) p1.start() p2.start() p1.join() p2.join()
补充说明
修复后,两个子进程会同时运行,你会看到aaa和bbb交替打印(不过具体的交替顺序由操作系统的进程调度决定,不一定是严格的一对一交替,但肯定会同时出现两种输出)。
内容的提问来源于stack exchange,提问作者user9649182
相关产品推荐
相关产品推荐

