django添加django_celery_results
project->project目录下编写相关配置代码
1. settings.py文件
INSTALLED_APPS=[,'django_celery_results']
以及一些相关设置
# celery配置,celery正常运行必须安装redis
CELERY_BROKER_URL = "redis://127.0.0.1:6379/0" # 任务存储
CELERY_RESULT_BACKEND = 'django-db' # 使用database作为结果存储
# 指定任务序列化方式
# CELERY_TASK_SERIALIZER = 'msgpack'
# 指定结果序列化方式
# CELERY_RESULT_SERIALIZER = 'msgpack'
# 指定任务接受的序列化类型.
# CELERY_ACCEPT_CONTENT = ['msgpack']
CELERYD_MAX_TASKS_PER_CHILD = 100 # 每个worker最多执行300个任务就会被销毁,可防止内存泄露
CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区
CELERY_ENABLE_UTC = True # 启动时区设置
2. init.py文件
from .celery import app as celery_app
__all__ = ('celery_app',)
3. celery.py文件
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "项目名project.settings")
app = Celery('audit')#, task_serializer='yaml')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
celery使用
migrate等操作后生成对应数据库表
任务函数编写
from 项目名project import celery_app
@celery_app.task
def sum(x, y):
return f"结果为:{x + y}"
任务函数调用
print(sum.delay(x, y).task_id)
方便查看celery结果,对django_celery_results进行修改
将django_celery_results项目拷贝到extra_app目录下,方便对导出的项目统一管理修改
内容结果获取时不编码
backends》database.py中,DatabaseBackend的store_result负责从redis中读取结果并储存到数据库,所以修改对其调整下编码
"""
修改使得结果不编码
"""
# content_type, content_encoding, result = self.encode_content(result)代码后面添加
try:
import json
result = json.loads(result)
except:
pass