每个使用者有一个队列

2024-05-13 03:08:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我处于一个单一生产商/多个消费者的情况下。考虑到每个作业是独立的,消费者之间不进行通信。

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

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

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

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

单队列

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

多队列

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


Tags: producer文件可执行文件数量队列queueconsumer作业
1条回答
网友
1楼 · 发布于 2024-05-13 03:08:19

特别是在一家生产商的情况下->;对于许多消费者来说,好处是只有一个生产者必须连接到的队列,并且您可以根据您想要处理“下一个项目”的数量增加消费者。因为Python与线程的关系非常复杂,所以我建议使用asyncioasyncio.Queue。它非常直观,易于使用

我最近对这个话题进行了一番探讨,我发现这个gist对于理解它是如何工作的非常有帮助

无论如何,拥有更多的队列可能不会加快处理速度。只有在(处理消息的时间)<;(从队列获取消息),这在您的用例中不是这样的(对于IO任务等)

相关问题 更多 >