场景
用户发请求--->服务端接受处理--->服务端处理(花很长时间)--->用户收到结果
当服务端处理需要消耗比较长的时间且大量消耗CPU资源时,客户端与服务端的连接需要一直保持,同时,当大量的请求涌入时,可能会造成拥堵或者资源耗尽,此时则需要对客户端提交的请求进行有序的处理,引入消息队列工具。
用户发请求--->服务端接受请求--->服务端把要处理的函数以及参数交给task queue,并返回task_id (很快)--->用户收到task_id(请求已受理,但是还未完成,用户可用task_id对请求的状态进行查询)
用户发多少请求用户说了算,但是具体什么时间真正处理这个请求里的操作服务端说了算。消息队列工具比较适用于比较慢(不管是慢在 I/O 还是慢在 CPU )的操作,这种操作用户并不急着要结果,但是他在乎的是服务端收到这个请求,并且会在一定时间后完成这个操作。
Python中的常用消息队列工具
Celery是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具。是一个任务队列,着重于实时处理,同时还支持任务调度。
GitHub: https://github.com/celery/celery
Stars: 16.9k
RQ(Redis Queue)是一个简单的Python库,用于对作业进行排队并与工作人员在后台进行处理。它具有Redis的支持,并且设计为具有较低的进入门槛。它可以轻松地集成到您的Web堆栈中。
GitHub: https://github.com/rq/rq
Stars: 7.6k
hury是一个任务队列工具,具有简洁的API,支持Redis,SQLite以及内存内存储。
GitHub: https://github.com/coleifer/huey
Stars: 3.4k
Dramatiq是Python的后台任务处理库,其重点是简单性,可靠性和性能。
GitHub: https://github.com/Bogdanp/dramatiq
Stars: 2.5k
Dask是用于Python中并行计算的灵活库。其包含两部分,一是动态任务调度,这类似于 Airflow,Luigi,Celery或Make,但针对交互式计算工作负载进行了优化。二是“大数据”集合(如并行数组,数据框和列表),将诸如NumPy,Pandas或Python迭代器之类的通用接口扩展到内存或分布式环境。这些并行集合在动态任务计划程序之上运行。
GitHub: https://github.com/dask/dask
Stars: 8.1k
参考