1. 安装
pip install celery
2. 创建实例和加载配置
2.1 创建celery_tasks包
2.2 在包中创建入口文件。如: main.py
2.3 在main.py中创建celery实例
from celery import Celery
# 创建celery实例
celery_app = Celery('celery_name')
2.4 创建配置文件。如config.py
2.5 在配置文件中定义celery消息队列broker的位置
# amqp 消息队列协议
#broker_url = 'amqp://guest:guest@192.168.103.158:5672'
broker_url = 'redis://127.0.0.1/10'
2.6 在main.py中加载配置
# celery启动文件
from celery import Celery
# 创建celery实例
celery_app = Celery('celery_name')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')
2.7 创建一个任务。如 创建test_tasks包->tasks.py
from celery_tasks.main import app
@app.task
def add(x, y):
return x + y
2.8 在main.py中注册任务
from celery import Celery
celery_app = Celery('celery_name')
celery_app.config_from_object('celery_tasks.config')
# 注意,celery加载配置会默认找我们配置的包路径下的tasks.py文件
celery_app.autodiscover_tasks(['celery_tasks.test_tasks'])
3. 启动celery服务
由于celery不支持在windows下运行任务,需要借助eventlet来完成
# 注意:由于celery不支持在windows下运行任务,需要借助eventlet来完成
# 安装eventlet
pip install eventlet
# 由协程启动celery -c 后面跟协程数
celery -A celery_tasks.main worker -l info -P eventlet -c 1000
4. 在实际需要调用任务的地方使用celery执行
import time
from celery_tasks.test_tasks.tasks import add
if __name__ == '__main__':
result = add.delay(1, 9)
while True:
if result.ready():
print(result.get(timeout=1))
break
else:
time.sleep(2)
>> from celery_tasks.test_tasks.tasks import add
>> r = add.delay(1, 9)
>> r.ready()
True
>> r.get()
10