django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)相关的知识,希望对你有一定的参考价值。

django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)_django

知识点

通过本文可以获取的知识点有:

1、celery信号中的 ​​logging signal​

​after_setup_logger 参考地址​

2、Django中如何配置和使用celery

3、Django中如何加载celery 信号

主要是Django中应用入口的 ​​ready(self)​​ 函数认识和使用

4、Python logging​​自定义 Handler​

​Python logging 模块介绍​

需求分析

1、每个任务的日志独立存放,那么肯定是要能获取到任务id,然后按照​​任务id设定日志文件路径​

2、Django程序中执行task,那么程序中日志的写入,肯定不能使用print打印输出到启动程序Django主日志中去, 那肯定是采用​​logging模块​​配置不同的logger来实现

3、Django怎么把自定义的logger和celery关联起来呢, celery有自己自带的logger(​​from celery.utils.log import get_task_logger​​),每个task 独立日志肯定不能放到这个自带的logger

需求实现

一、我们先创建Django工程和测试用的应用demoapp,然后在应用中利用celery跑一个任务task

先给出工程和应用的结构

├── demoapp
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── celery
│ │ └── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tasks.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── django_celery_singal
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-36.pyc
│ │ └── settings.cpython-36.pyc
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

注意这里有个知识点

一般情况,Django继承celery的时候,大家默认是在工程文件夹(比如这里的 django_celery_singal)下创建celery,然后在工程的​​__init__.py​​ 文件中进行import加载。

其实这不是唯一选择。可以放到任何地方,关键在于启动celery的时候​​-A​​ 参数后面根的值

1.1、配置celery

# demoapp/celery/__init__.py
import os
from celery import Celery

os.environ.setdefault(DJANGO_SETTINGS_MODULE, django_celery_singal.settings)
app = Celery(__name__)

# 从Django的settings.py加载 celery的配置
app.config_from_object(django.conf:settings, namespace=CELERY)
# 自动发现应用中的tasks(应用中的tasks.py文件中定义的任务)
app.autodiscover_tasks()

# demo_celery_signal/settings.py
# settings for celery
CELERY_TIMEZONE = Asia/Shanghai
CELERY_ENABLE_UTC = False
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60

CELERY_BROKER_URL = "redis://127.0.0.1:6379/11"
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/11"
CELERY_RESULT_SERIALIZER = json

重点

以上是关于django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)的主要内容,如果未能解决你的问题,请参考以下文章

Django配置Celery执行异步和同步任务(tasks))

celery在Django中的使用

celery:celery介绍架构基本使用,celery执行异步任务延迟任务定时任务,django中使用celery。

Django使用Celery加redis执行异步任务

Django使用Celery异步任务队列

Celery 3 版本 定时执行与 异步执行 | Django 案例