每个消费者一个队列- Python



我在单生产者/多消费者场景。考虑每个作业都是独立的,消费者之间不进行通信。

  1. 为每个消费者创建不同的队列是不是一个好主意?通过这种方式,生产者以循环的方式在每个队列中添加作业,并且在访问单个队列时没有延迟。

  2. 还是最好尽量减少队列的数量?

  3. 在单个队列和大量消费者(如20或更多)的情况下,由于同步访问队列而导致的延迟是否相关?

我使用Python 3.7和多线程/多处理来创建几个消费者。每个消费者都需要运行一个可执行文件并执行一些I/O操作(写、移动或复制文件)。我目前已经开发了多处理和单队列,但我正在考虑改变多线程和多队列的方法。

单一队列

Consumer
/
/  ..
Producer --> [ Queue ] -- Consumer
  ..

Consumer

多个队列

-> [ Queue ] -- Consumer
/ 
/ ..
Producer ----- -> [ Queue ] -- Consumer
 ..

-> [ Queue ] -- Consumer

特别是在一个生产者的情况下->这样做的好处是生产者只需要连接1个Queue,你可以启动任意数量的消费者来处理"下一个项目"。因为Python与Threading的关系非常复杂,所以我建议使用asyncioasyncio.Queue。它非常直观,易于使用。

我最近复习了一下这个话题,我发现这个要点对理解它是如何工作的很有帮助。

在任何情况下,拥有更多的队列可能不会加快处理速度。只有当(处理消息的时间)<(从队列中获取消息),这在你的用例中不是这样的(与IO任务等)。

相关内容

  • 没有找到相关文章

最新更新