multiprocessing.Queue 的高性能替代品

Ale*_*nko 5 python message-queue zeromq

我的分布式应用程序由许多将任务推送到多个 FIFO 队列的生产者以及每个队列的多个消费者组成。所有这些组件都位于单个节点上,因此不涉及网络。

Python 的内置功能完全支持这种模式multiprocessing.Queue,但是当我扩展应用程序时,队列实现似乎是一个瓶颈。我没有发送大量数据,因此内存共享并不能解决问题。我需要的是每秒快速保证传送 10^4-10^5 条小消息。每条消息大约为 100 字节。

我是快速分布式计算世界的新手,我对大量的选择感到非常困惑。有RabbitMQ、Redis、Kafka等。

ZeroMQ 是一个更加专注和紧凑的替代方案,它还有 nanomsg 和 nng 等后继者。此外,在没有代理的情况下,实现诸如具有保证交付的多对多队列之类的东西似乎并不简单。

如果有人能向我指出一种使用更快的框架之一执行此类操作的“标准”方法,我将非常感激。

Ale*_*nko 7

在尝试了一些可用的实现和框架之后,我仍然找不到任何适合我的任务的东西。要么太慢,要么太重。

为了解决这个问题,我和我的同事开发了这个:https ://github.com/alex-petrenko/faster-fifo

fast-fifo 是 Python 的直接替代品multiprocessing.Queue,并且速度明显更快。事实上,在我关心的配置(许多生产者,很少消费者)中,它的速度提高了 30 倍,因为它还支持get_many()消费者端的方法。

它是无代理的、轻量级的,支持任意多对多配置,使用 pthread 同步原语为 Posix 系统实现。

  • 我在另一个项目中尝试了更快的 fifo,最新版本工作得非常好,比多处理队列更快。 (2认同)