1. 用celery的原因
在这个django项目中,用到了短信验证(基于容联云)的功能,考虑到未来访问量过大时,因为django是同步框架,如果django卡住了,整个进程就寄了,短信验证码的发出将变得非常的慢且低效率。
因此就考虑用到了celery这个分布式系统,将发短信的任务交给他来完成,这样以上的问题就会迎刃而解。
2. celery的通信机制
Celery 通过消息机制进行通信,通常使用中间人(Broker)作为客户端和职程(Worker)调节。启动一个任务,客户端向消息队列发送一条消息,然后中间人(Broker)将消息传递给一个职程(Worker),最后由职程(Worker)进行执行中间人(Broker)分配的任务。 下面对Broker,Worker,Backend等专有名词进行解释。
Broker:
broker就是celery中所谓的中间件,一般采用Redis或者RabbitMQ,关于这两者的优劣,有大佬已经整理过了,我直接厚颜无耻的粘过来吧嘿嘿。
但是我本人并没有用过RabbitMQ,只使用过Redis,不予评价。
Worker:
worker是celery的核心执行模型,具体下面实例看。
Backend:
如果需要查看异步任务的调用结果,就需要使用到了backend这个参数了。在我们像指明broker一样指明了backend之后,当worker执行完任务,会返回task唯一id作为键,将结果作为值传递给backend,这个时候你可以拿着这个id去redis里面查找结果。
3. 与django结合使用
1.在主项目目录下创建celery.py
2 . 子应用下创建工作文件
注意名字一定是tasks.py!!!!