Django中使用celery创建异步队列
- 创建celery任务
1. 安装celery
pip install celery -- 如果报错(没有权限,就需要加上 sudo;如果对版本有需求,celery==“版本号”即可)
2. 创建文件路径
官方文档的创建 http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html
因为我结合的时Django框架,所以就说一下django中的创建
django的启动目录中创建一个celery_tasks包,celery_tasks中创建main.py
1.如果存在一两个异步任务,个人推荐直接在main.py中添加任务,避免发生不必要的错误.celery/main.py
2.如果存在很多异步任务,就使用多层文件夹实现。例如 celery_tasks/demo1/tasks.py;celery_tasks/demo2/tasks.py
- 对象和配置代码实现
- 创建对象 app = celery.Celery("") – 参数有很多,常用的 “name”, broker
- name是对象的名字,broker是用来保存队列任务的(常用redis,rabbitmq)# coding=utf8 import celery app = celery.Celery("demo", broker="redis://127.0.0.1:6379/1") # 导入配置 celery_app.config_from_object('celery_tasks.config') # 导入任务(此方式是在很多异步任务的情况下使用) celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])
说明: 链接redis的方式:redis://127.0.0.1:6379/1 其中1是redis中16个库中的一个
- 任务的添加
@app.task(name="index") def index(data): pass
- celery的开启
- 用到的只有一个 ----- celery worker -A proj -l info
这条命令存在很多坑。 1.这条命令在什么路径下运行? 2.这条命令中的proj是什么?
解决:
- 命令必须在django的启动文件目录下运行
- proj 指的是main.py,但是完整的路径应该是 celery worker -A celery_tasks.main -l info
- -l info 是日志输出
注意: 运行之后,有神奇的地方是main.py可以运行,但是出现无法导入包的情况(Import Error:)。
这点真的是,一定要注意文件路径的导入问题。如果发现所有的包导入并没有曲线报错,那就重新写一个,把之前的删除掉,可能就神奇的好了。
- 用到的只有一个 ----- celery worker -A proj -l info