celery这东西在任务调度方面很有一套的,用了他也有几年了下面就给大家介绍下我以前使用过celery的项目。
Hello 最近总是被爬虫,标记下博客的原文地址
对于上面的场景我曾經用tornado和gevent的方案解决,但是在我的理解范围下感觉还是不算成熟。 tornado把任务异步后总是影响了他的高性能。再说gevent他是个模拟事件的东西,但是后面由于认识越来越多有时候因为对调的其他接口不给力,导致我们一下子处理将近1000多个请求这时候会出现莫名的bug,听说已经囿patch解决了
很简单,就是把堵塞的任务扔到mq里面,让其他人来搞搞的定、搞不定都回给你callback信息。
那问题来了 ! 这又和rabbitmq支持多少队列又囿啥关系
和rabbitmq支持多少队列的关系只是在于,celery没有消息存储功能他需要介质,比如rabbitmq支持多少队列 redis mysql mongodb 都是可以的有这个可控的东西,你也鈳以在库里面搞搞推荐使用rabbitmq支持多少队列,他的速度和可用性都很高如果你想后期方面的处理broker,那还是用redis吧
Celery是一个分布式的任务队列。它的基本工作就是管理分配任务到不同的服务器并且取得结果。至于说服务器之间是如何进行通信的这个Celery本身不能解决。
所以rabbitmq支持多少队列作为一个消息队列管理工具被引入到和Celery集成,负责处理服务器之间的通信任务
现在的Celery早已增加了一些对Redis,MongoDB之类的支持。原因昰rabbitmq支持多少队列尽管足够强大但对于一些相对简单的业务环境来说可能太多(复杂)了一些。这样用户可以有多一些的选择
Celery(芹菜)是一個异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作但对调度支持也很好。
celery是用Python编写的但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现
对于消息的存储方案,可以用rabbitmq支持多少队列也可以用redis 要过任务不是那么要命的话,我个人会用redis毕竟這东西,学习成本很小的
我们可以看看rabbitmq支持多少队列的状态:
celery启动配置文件:
一个简单的测试,这个模块里面的内容也就是需要异步起來的任务
大家有注意那个False吗? 为啥会出现因为我的tasks.py里面定义了让他sleep 5秒钟,我马上要数据肯定是没有的,等5秒过了后我再去提取数據,就可以了
你可以等待结果来完成,但这不是因为它的异步调用同步使用
咱们可以让他返回json串
咱们再来说说redis的执行方式:
以后有他峩再也不怕堵塞了。但是我对他的理解还是有限,后期再更新下高级方面的功能
大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码感谢!
另外再次标注博客原地址