我正在尝试使用 python 的多处理模块在几台机器上运行分布式任务,我一直在使用这篇博文作为参考。
但是,这篇文章的任务使用了一个作业队列,并将结果放入一个结果队列中,这两个队列都由 JobQueueManager(它是 SyncManager 的子类)管理。这个管理器有一个服务器,它启动并持续运行,直到结果队列被填满,当它调用manager.shutdown()
.
我的问题是我的任务不需要结果队列,所以我试图弄清楚如何知道何时停止服务器。我可以让服务器持续运行serve_forever
,然后手动停止它,或者创建一个虚拟队列,以与示例中相同的方式填充,并在服务器与原始作业数量一样大时停止服务器。
我不想手动停止它,但第二种解决方案似乎相当老套。似乎一种常见的方法(没有服务器)是调用join()
每个进程,但我不知道管理器是否有办法找出哪个进程从队列中删除了每个作业。
我的后备计划是虚拟队列方法的一种变体,但是共享计数器变量作为每个进程的最后一步递增,但我想知道是否有任何建议使用多处理库中的方法,或者是否这是不可靠的。
谢谢
编辑:我没有提到我不使用结果队列的原因是我将处理结果存储到 Redis 数据库。