

麻烦问一下
这里为什么如果不添加join堵住主进程,运行结果只是over,控制台并没有进入池中的结果;
而添加后才会进入池中,控制台显示结果
意思是说如果主进程运行完,子进程就不运行了吗?


麻烦问一下
这里为什么如果不添加join堵住主进程,运行结果只是over,控制台并没有进入池中的结果;
而添加后才会进入池中,控制台显示结果
意思是说如果主进程运行完,子进程就不运行了吗?
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
你的问题涉及到Python的多进程编程中的进程池(Pool)的使用和主进程与子进程的关系。我来逐一解答你的疑问。
首先,让我们明确一点,Python的multiprocessing模块中的Pool是一个进程池,它允许你创建和管理多个子进程。当你使用apply_async方法时,你是在向进程池提交一个异步任务。这意味着这个任务会被放入队列中等待执行,但并不一定会立即执行。实际上,它会何时执行取决于进程池中的可用进程数量和其他正在运行的进程。
关于你的问题:
join()堵住主进程,运行结果只是"over",控制台并没有进入池中的结果?这是因为当你没有调用join()方法时,主进程在完成其任务后会直接结束,而不会等待子进程的完成。由于主进程已经结束,所以你不会在控制台看到子进程的输出。而join()方法的作用是阻塞主进程,使其等待所有子进程完成执行。这样,你就可以看到子进程的输出了。
join()后才会进入池中,控制台显示结果这是join()方法的作用。当你调用join()后,主进程会等待所有子进程完成执行。这意味着,在你调用join()之后,主进程会暂停执行,直到所有子进程都完成他们的任务。因此,你会在控制台看到子进程的输出。
总结起来,确实如此:如果主进程运行完并直接结束,没有调用join()来等待子进程,那么子进程可能不会被执行完。而当你调用join()后,主进程会等待所有子进程完成执行,这样你就能在控制台看到子进程的输出。
为了确保你能够正确看到每个子进程的输出,通常建议在主进程中调用join()方法。