0. celery整体逻辑图
个人理解为:此处的客户端client与以往定义的客户端(前端)并不一样,角色相当于以往的后端逻辑处理代码,即发布任务的一方,只是相当于处理者worker而言是客户端。
1.准备工作:
1)python manage.py runserver 运行服务代码,此步骤对应于开启客户端的程序,监听用户发送短信指令的行为。
2)celery -A ihome.task.main worker -l info 此指令是真正执行异步发送短信的代码,指令中main 指的是处理者worker的启动文件main.py,-l info指的是日志等级。
2.过程总结:
1)用户在登录界面输入手机号以及图片验证码,并点击获取验证码;
此时调用后端api中相关逻辑处理函数get_sms_code(mobile);
get_sms_code函数中调用celery,使用send_sms.delay()异步发送短信,客户端监听到此指令。
上图中之所以单独为worker创建一个文件夹sms,是因为实际项目中,会有多个tasks,通常每个task建立一个文件,目录和sms平级。
2)接下来,客户端将发送短信的指令send_sms保存任务队列broker中,即redis中的1号数据库。
3)接下来,真正的worker从broker中取出任务,并通过启动文件main.py中的配置的路径,自动**搜寻(autodiscover)**相应路径下具有真实操作逻辑函数的send_sms函数,即真正操作发送短信的worker,并执行相关动作。