微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每个消费者一个队列 - Python

如何解决每个消费者一个队列 - Python

我处于单一生产者/多个消费者的场景中。考虑到每个作业都是独立的,消费者之间没有通信。

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

  2. 还是尽可能减少队列数量更好?

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

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

单队列

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

多队列

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

解决方法

特别是在一个生产者 -> 许多消费者的情况下,好处是只有 1 个生产者必须连接到的队列,并且您可以启动任意数量的消费者来处理“下一个项目”。由于 Python 与线程的关系非常复杂,我建议将 asyncioasyncio.Queue 一起使用。它非常直观且易于使用。

我最近重温了这个话题,我发现这 gist 对理解它的工作原理非常有帮助。

无论如何,拥有更多队列可能不会加快您的处理速度。仅当(处理消息的时间)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。