Python:具有多个使用者的队列的多处理配方

Python:具有多个使用者的队列的多处理配方,python,parallel-processing,multiprocessing,queue,recipe,Python,Parallel Processing,Multiprocessing,Queue,Recipe,由于我一直在浪费大量时间尝试加入python多处理体系结构中的join()工作者,这些工作者从多处理.Queue获取任务,而队列同时由一个feeder函数通过put(): 有人能为这种体系结构提供一个简短但可靠的方法吗? 比如说,多达10个馈线和100名工人。队列项目可能很大 我只能猜测,在过去,我经常让队列忙碌,不再响应,但大多数情况下,我完成了任务,只有作业从未加入,或者它们是否加入似乎取决于任意参数 因此,想象一下以下工作流程: 一个或多个feeder()作业从输入(即磁盘)读取,并为第

由于我一直在浪费大量时间尝试加入python
多处理
体系结构中的
join()
工作者,这些工作者从
多处理.Queue
获取任务,而队列同时由一个feeder函数通过
put()

有人能为这种体系结构提供一个简短但可靠的方法吗?

比如说,多达10个馈线和100名工人。队列项目可能很大

我只能猜测,在过去,我经常让队列忙碌,不再响应,但大多数情况下,我完成了任务,只有作业从未加入,或者它们是否加入似乎取决于任意参数

因此,想象一下以下工作流程:

  • 一个或多个
    feeder()
    作业从输入(即磁盘)读取,并为第一行工作人员创建任务。他们将任务放入队列
    Q
    。当没有更多的任务要创建时,馈线应该加入
  • 许多工人从
    Q
    中取出任务并进行处理。然后他们将结果放入另一个队列
    R
    。当这些工人无法从
    Q
    获得更多的工作并且完成了最后一项任务时,他们应该加入。考虑到由于无效的输入/任务,它们可能会看到异常。他们仍然应该加入
  • 让我们添加另一行worker,它总是从
    R
    中获取两个结果,合并它们并将结果放回
    R
    。当
    R
    中只剩下一个结果时,第二行的所有工作人员都应加入
  • 最后,我可以从
    R
    中取出最后一个剩余的聚合结果并感到高兴
我认为这个设置应该包括足够多的方面,以允许概括许多不同的任务

为了避免阻塞队列,我已经尝试了以下想法:

  • 使用多个队列,始终放置到最小队列,并从随机队列获取
  • 不要在
    get()
    中阻塞,但尝试不等待地获取,如果失败,请短时间睡眠并重试,记录尝试次数,过一段时间后,假设队列为空,则放弃
我可以添加一些代码,但这可能会导致错误修复,而不是共享最佳实践