首页 > 解决方案 > Python,多线程工作队列:当工作人员可能等待其他工作人员完成时,避免死锁的正确设计是什么?

问题描述

我有一个典型的场景,我有有限数量的线程/工作者,它们永远从队列中获取和处理任务。这些任务是典型的读取 > 处理 > 保存。事实证明,其中一些任务本身可以添加到任务队列中,并在释放之前等待它们提供的任务完成(典型的 .join() 操作)。

在这种情况下,我们很可能会陷入死锁,其中有限数量的工人都被分配并忙于自己等待其他任务完成的任务 - 但是没有工人离开,他们永远不会这样做,我们就是死锁。例如,有 5 个工作人员可用,他们立即拉取 5 个任务,再触发 15 个任务并等待它们完成 - 因为只有 5 个可用工作人员被阻止,所以它们永远不会完成。

显然,如果有足够的工人,这种情况不太可能发生,但这并不是很令人满意(我们很可能有 200 名工人每人轮询 20 个新任务)。我想到了一些解决方法——但没有一个看起来很优雅

对这种场景的正确设计有任何想法吗?

标签: pythonmultithreadingdeadlock

解决方案


推荐阅读