关于队列

来源:7-17 工程view视图层代码逻辑实现及自动化接口执行演示

qq_盲区行者_0

2018-04-10

老师celery redis queue channels您更推荐哪个用作队列?

写回答

2回答

Jeson

2018-04-11

你好,这个问题其实挺大的。

如果在实现异步任务的场景上,在需要用到消息队列的模式,主要取决于你具体的场景和系统规模决定,我推荐如下几种选择:

1、开发能力足够、底层支持需要更灵活:大型企业会自己开发整套系统

2、自动化系统规模偏大、场景丰富,推荐selery+rabbitMQ

3、稍微轻量级实现:推荐redis、RabbitMQ +python模块CURD化封装。

4、最轻量级:推荐使用queue。

Channels主要还是在网络层的请求通信上,并不适合在这套系统任务中完全承担消息队列,可以结合来作一些小的事件响应任务之类的功能。

我再给你介绍下他们区别:

1、Redis VS Rabbit MQ

两者都可以作为消息队列,就是一款队列任务存储的单独服务。总的来说Rabbit MQ相对Redis在易用性、扩展性、高可用性等更加优秀。而redis则适合更加轻量化的应用。

Redis:轻量级,高并发,延迟敏感
即时数据分析、秒杀计数器、缓存等

RabbitMQ:重量级,高并发,异步
批量数据异步处理、并行任务串行化,高负载任务的负载均衡等

2、Celery是一套实时任务处理的队列管理系统,同时支持任务调度。

3、关于Channels

Channels是django的一款插件,它出现可以让 Django 不仅可以处理纯 HTTP 请求,包括 HTTP2 和WebSockets,也有能力在请求发送到缩略图或后台运算时也能运行运行代码。

Channels运用在面向http请求事件响应方面。如:聊天室应用、消息推送场景等。

4、queue

Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 基本FIFO队列.

它就是一个款简单的python下的FIFO队列,更加适合一些非常轻量场景,或者说单机脚本多线程消息传递使用。


1
0

qq_盲区行者_0

提问者

2018-04-10

好像还有channels,这个您怎么看

0
0

Python+Django+Ansible Playbook自动化运维项目实战

【课程升级3.6版本】大牛全面践行DevOps,运维与开发间高效协作

861 学习 · 326 问题

查看课程