HUANGWANG'S BLOG

Python中的消息队列工具

场景

  • 未使用消息队列工具时

用户发请求—>服务端接受处理—>服务端处理(花很长时间)—>用户收到结果

当服务端处理需要消耗比较长的时间且大量消耗CPU资源时,客户端与服务端的连接需要一直保持,同时,当大量的请求涌入时,可能会造成拥堵或者资源耗尽,此时则需要对客户端提交的请求进行有序的处理,引入消息队列工具。

  • 使用消息队列工具后

用户发请求—>服务端接受请求—>服务端把要处理的函数以及参数交给task queue,并返回task_id (很快)—>用户收到task_id(请求已受理,但是还未完成,用户可用task_id对请求的状态进行查询)

用户发多少请求用户说了算,但是具体什么时间真正处理这个请求里的操作服务端说了算。消息队列工具比较适用于比较慢(不管是慢在 I/O 还是慢在 CPU )的操作,这种操作用户并不急着要结果,但是他在乎的是服务端收到这个请求,并且会在一定时间后完成这个操作。

Python中的常用消息队列工具

  • Celery

Celery是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具。是一个任务队列,着重于实时处理,同时还支持任务调度。

GitHub: https://github.com/celery/celery

Stars: 16.9k

  • RQ (Redis Queue)

RQ(Redis Queue)是一个简单的Python库,用于对作业进行排队并与工作人员在后台进行处理。它具有Redis的支持,并且设计为具有较低的进入门槛。它可以轻松地集成到您的Web堆栈中。

GitHub: https://github.com/rq/rq

Stars: 7.6k

  • huey

hury是一个任务队列工具,具有简洁的API,支持Redis,SQLite以及内存内存储。

GitHub: https://github.com/coleifer/huey

Stars: 3.4k

  • Dramatiq

Dramatiq是Python的后台任务处理库,其重点是简单性,可靠性和性能。

GitHub: https://github.com/Bogdanp/dramatiq

Stars: 2.5k

  • Dask

Dask是用于Python中并行计算的灵活库。其包含两部分,一是动态任务调度,这类似于 Airflow,Luigi,Celery或Make,但针对交互式计算工作负载进行了优化。二是“大数据”集合(如并行数组,数据框和列表),将诸如NumPy,Pandas或Python迭代器之类的通用接口扩展到内存或分布式环境。这些并行集合在动态任务计划程序之上运行。

GitHub: https://github.com/dask/dask

Stars: 8.1k


参考