为什么使用 rabbitmq 或类似的而不是 python 内置多处理队列?

why use rabbitmq or similar versus python builtin multiprocessing queue?

我有一个任务生产者和多个工作人员来处理这些任务。很多地方推荐rabbitmqand/orcelery。但是 python 有一个内置的多处理队列,可以使用 manager/proxy 在 ip/port 上共享。使用像 rabbitmq 这样的东西代替有什么好处?

RabbitMq 是一个企业级工具,通常单独部署在 out-of-process 服务器/虚拟机/容器上,并在企业服务总线中发挥作用 space。

  • Rabbit 作为 objective 具有可靠的消息传递 - 例如消息被持久化,集群中的节点可以在不丢失消息的情况下重新启动。
  • 支持范围广泛的messaging topologies,例如Point-Point、扇出和主题订阅
  • 可以通过向集群添加多个节点来扩展容量
  • 允许使用路由键或 header 过滤器将消息有条件地路由到 queues
  • 客户端技术不可知,即客户端可以在任何支持 AMQP 协议的平台上
  • 具有开箱即用的管理、监控和诊断功能UI
  • 具有广泛的扩展和工具,例如shovels允许跨多个 RabbitMQ 集群复制消息。

我不是 Python 专家,但根据我对 multiprocessing package 的了解,它充当在工作进程和线程之间分配工作的管理器,因此 IMO 将被视为更多本地系统关注,而不是 'enterprise' 级别。 例如您将需要 handle persistence,即消息不会在崩溃/重启期间丢失,并且可能需要构建您自己的管理和监控工具。