首先说明我用的django框架,那么为什么要使用celery框架,django3.0以下版本都是同步处理请求,假设我现在有一万个任务,我的django框架是承受不了的,所以就用到了clery异步.
首先在settings配置
# 异步任务代理
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/'
# 任务结果
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/'
# 保存格式
CELERY_RESULT_SERIALIZER = 'json'
在项目下创建一个celery.py 在里面写
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# 设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'liuyue_good.settings')
# 注册Celery的app
app = Celery('liuyue_good')
# 绑定配置文件
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现各个app下的tasks.py文件
app.autodiscover_tasks()
在__init中写
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
# 导包
import pymysql
# 初始化
pymysql.install_as_MySQLdb()
__all__ = ['celery_app']
在views中定义函数调用celery任务
from factory_test import SimpleFactory
from myapp import tasks
from django.http import JsonResponse
# 调用celery任务
def celery_test(request):
tasks.aync_test.delay()
SimpleFactory.ThirdLogin("gitee")
return JsonResponse({'task_id': 'Hello python'})
最后启动celery
# celery协程启动命令
celery worker -A liuyue_good -l info -P eventlet
问题来了 怎么用celery设置一个定时任务呢???
别急这就来了
在settings里配置
CELERY_BEAT_SCHEDULE = {
# 定义定时任务
'celery_work': {
'task': 'myapp.tasks.aync_test',
'schedule': timedelta(seconds=30)
}
}
启动定时任务也要有的
# 还要启动一个定时任务的服务
celery -A liuyue_good beat -l info
这样一个完整的celery就完成了 是不是感觉有点麻烦 别急嘛 还有简单一点的
在根目录下创建一个文件夹
里面配置celery
from celery import Celery
app = Celery('tasks', broker='redis://localhost', backend='redis://localhost')
@app.task(name='myapp.tasks.mail')
def mail(mailaddr):
print(mailaddr)
怎么样是不是超简单
别急还没完 需要启动celery
celery -A tasks worker --pool=solo -l info