Skip to main content
 首页 » 编程设计

python之进程完成后如何停止python多处理服务器

2025年05月04日8kenshinobiy

我正在尝试使用 python 的多处理模块在几台机器上运行分布式任务,我一直在使用 this blog post作为引用。

然而,这篇文章的任务使用作业队列,并将结果放入结果队列,这两者都由 JobQueueManager(SyncManager 的子类)管理。这个管理器有一个服务器,当它调用 manager.shutdown() 时,它会启动并持续运行直到结果队列填满。

我的问题是我的任务不需要结果队列,所以我想知道如何知道何时停止服务器。我可以使用 serve_forever 让服务器持续运行,然后手动停止它,或者创建一个虚拟队列,以与示例中相同的方式填充,并在服务器大到原始作业数。

我不想手动停止它,但第二个解决方案似乎很老套。似乎一种常见的方法(没有服务器)是在每个进程上调用 join(),但我不知道是否有办法让管理器找出哪个进程从排队。

我的后备计划是虚拟队列方法的一个变体,但有一个共享计数器变量,该变量在每个进程的最后一步递增,但我想知道是否有任何建议使用多处理库中的方法,或者如果这是不可靠的。

谢谢

编辑:我没有提到我不使用结果队列的原因是我将处理结果存储到 Redis 数据库中。

请您参考如下方法:

在给出的例子中:

outdict = shared_result_q.get() 

结果队列用于异步等待结果。这是主要的沟通方式。没有它,您需要另一种信号机制来确认任务结束事件。只需将 None 放入队列即可。