图片来源:http://blog.51cto.com/huangzp/2052713
最近生产环境的消息量越来越大,服务器采用nginx转发并负载均衡到tornado服务器,服务器有点处理不过来了。
分析了一下,有大量不需要实时返回结果的网络请求,所以打算将这一部分优化一下,使用异步进行处理。
通常异步处理使用的是的方式,我们先改造第一步,将服务器上的服务根据业务场景拆分为需要实时返回结果和可以异步处理两部分。
异步处理使用celery任务去处理,从上图可以看出,celery任务可以执行定时任务(由celery beat作为任务的生产者)和异步任务(由其它任务发起的异步调用)。所以异步任务的调用流程是。
按照上面的逻辑,实现celery异步任务需要以下几步:
1、创建celery应用
celery应用负责管理celery worker、指定Broker、Backend以及任务分发规则等,celery 应用的代码目录结构为:
里定义celery 应用
里列出里celery应用的配置参数
里定义了celery的task(worker)
2、调用异步任务
在其它业务里需要发起异步任务的地方调用
3、启动beat调度定时任务
开启调度所有定时任务,所有在celery_config.py的beat_schedule中的任务都会受调度
只开启调度一个定时任务,只需在启动worker时带上-B或者--beat参数即可,这种方式的缺点是只能调度一个定时任务
领取专属 10元无门槛券
私享最新 技术干货