NY6 2024-10-09 18:35 采纳率: 75%
浏览 4
已结题

关于Python中join的使用有一些不清楚的地方

img

img

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

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-10-09 18:36
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的问题涉及到Python的多进程编程中的进程池(Pool)的使用和主进程与子进程的关系。我来逐一解答你的疑问。

    首先,让我们明确一点,Python的multiprocessing模块中的Pool是一个进程池,它允许你创建和管理多个子进程。当你使用apply_async方法时,你是在向进程池提交一个异步任务。这意味着这个任务会被放入队列中等待执行,但并不一定会立即执行。实际上,它会何时执行取决于进程池中的可用进程数量和其他正在运行的进程。

    关于你的问题:

    1. 为什么如果不添加join()堵住主进程,运行结果只是"over",控制台并没有进入池中的结果?

    这是因为当你没有调用join()方法时,主进程在完成其任务后会直接结束,而不会等待子进程的完成。由于主进程已经结束,所以你不会在控制台看到子进程的输出。而join()方法的作用是阻塞主进程,使其等待所有子进程完成执行。这样,你就可以看到子进程的输出了。

    1. 添加join()后才会进入池中,控制台显示结果

    这是join()方法的作用。当你调用join()后,主进程会等待所有子进程完成执行。这意味着,在你调用join()之后,主进程会暂停执行,直到所有子进程都完成他们的任务。因此,你会在控制台看到子进程的输出。

    总结起来,确实如此:如果主进程运行完并直接结束,没有调用join()来等待子进程,那么子进程可能不会被执行完。而当你调用join()后,主进程会等待所有子进程完成执行,这样你就能在控制台看到子进程的输出。

    为了确保你能够正确看到每个子进程的输出,通常建议在主进程中调用join()方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日