每个消费者一个队列 - Python
One Queue for each Consumer - Python
我处于 single-producer/multiple-consumers 场景中。考虑到每个作业都是独立的,消费者之间不进行通信。
为每个消费者创建不同的队列是个好主意吗?
这样,生产者以循环方式在每个队列中添加作业,并且访问单个队列没有延迟。
还是尽量少排队比较好?
在单个队列和大量消费者(例如 20 个或更多)的情况下,由于对队列的同步访问导致的延迟是否相关?
我正在使用 Python 3.7 和 multithreading/multiprocessing 创建多个消费者。每个消费者都需要 运行 一个可执行文件并执行一些 I/O 操作(写入、移动或复制文件)。我目前使用多处理和单队列开发它,但我正在考虑改变多线程和多队列的方法。
单队列
Consumer
/
/ ..
Producer --> [ Queue ] -- Consumer
\ ..
\
Consumer
多队列
-> [ Queue ] -- Consumer
/
/ ..
Producer ----- -> [ Queue ] -- Consumer
\ ..
\
-> [ Queue ] -- Consumer
特别是在一个生产者 -> 许多消费者的情况下,好处是生产者必须连接到只有 1 个队列,并且您可以启动任意数量的消费者来处理 'the next item' .因为Python和Threading的关系很复杂,所以我建议用asyncio
和asyncio.Queue
。它非常直观且易于使用。
我最近复习了这个话题,我发现这个 gist 对理解它的工作原理很有帮助。
无论如何,拥有更多队列可能不会加快您的处理速度。只有在(处理消息的时间)<(从队列中获取消息)时才会出现这种情况,而在您的用例中(使用 IO 任务等)情况并非如此。
我处于 single-producer/multiple-consumers 场景中。考虑到每个作业都是独立的,消费者之间不进行通信。
为每个消费者创建不同的队列是个好主意吗? 这样,生产者以循环方式在每个队列中添加作业,并且访问单个队列没有延迟。
还是尽量少排队比较好?
在单个队列和大量消费者(例如 20 个或更多)的情况下,由于对队列的同步访问导致的延迟是否相关?
我正在使用 Python 3.7 和 multithreading/multiprocessing 创建多个消费者。每个消费者都需要 运行 一个可执行文件并执行一些 I/O 操作(写入、移动或复制文件)。我目前使用多处理和单队列开发它,但我正在考虑改变多线程和多队列的方法。
单队列
Consumer
/
/ ..
Producer --> [ Queue ] -- Consumer
\ ..
\
Consumer
多队列
-> [ Queue ] -- Consumer
/
/ ..
Producer ----- -> [ Queue ] -- Consumer
\ ..
\
-> [ Queue ] -- Consumer
特别是在一个生产者 -> 许多消费者的情况下,好处是生产者必须连接到只有 1 个队列,并且您可以启动任意数量的消费者来处理 'the next item' .因为Python和Threading的关系很复杂,所以我建议用asyncio
和asyncio.Queue
。它非常直观且易于使用。
我最近复习了这个话题,我发现这个 gist 对理解它的工作原理很有帮助。
无论如何,拥有更多队列可能不会加快您的处理速度。只有在(处理消息的时间)<(从队列中获取消息)时才会出现这种情况,而在您的用例中(使用 IO 任务等)情况并非如此。