Django + Celery 实现异步发送短信 实现及部署
第一步 安装celery 及redis(不是redis服务,是与redis交互的库):
pip install pip install -U celery==4.3.0 -i https://pypi.douban.com/simple (版本可根据实际来定,这里使用的是4.3.0版本)
pip install redis -i https://pypi.douban.com/simple
第二步 项目里集成celery (即在manage.py同级的目录下新建一个 celery_mq 包)
第三步 在celery_mq 中增加 main.py(celery实例化,主文件) config.py (celery配置文件 即队列和结果 redis库) result_backend 的结果是有过期时间的是一天 (可以通过ttl key 查看)
第四步 在文件夹中增加一个 包用来定义需要执行的耗时操作这里做的是 异步发送短信 所以是 sms ,接着再 sms中定义一个task.py的文件,必须是这个名字,然后把具体的逻辑代码写在task.py文件中,也可以增加需要的外部第三方的包或者文件
第五步 在需要调用异步任务的地方导入在 task.py 中定义好的方法
第六步 启动 另开一个窗口(先把服务启动)在项目根目录下执行 即看到manage.py的层级
celery -A celery_mq.main worker -l info
-A指对应的应用程序, 其参数是项目中 Celery实例的位置。
worker指这里要启动的worker。
-l指日志等级,比如info等级
部署celery (supervisor)
[program:celery_mq]
directory=/var/www/server/TypeServer (celery_mq所在的目录)
command=celery -A celery_mq.main worker -l info (启动的命令)
priority=1
process_name=%(program_name)s_%(process_num)02d
numprocs=1
autostart=true
autorestart=true
stderr_logfile=/var/log/celery/celery_mqErr.log
stdout_logfile=/var/log/celery/celery_mq.log
redirect_stderr=true
进入 supervisorctl 客户端 执行 update (此时如果你的日志文件所在目录没有创建,则会报错,需要先去创建然后接着执行update)
然后接着 会提示 进程 celery_mq added process group 意思是加到进程组了
然后status 即可看到 处在 running 的状态,然后可以去看一下日志
接着就是测试看看是否可以生效了
测试可以查看日志和redis里的值是否能对应上,对应上即可(测试没问题)