django_celery_results的使用


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