微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

celery Django:如何仅在被 celery beat 调用而不是从 django 调用时才允许记录

如何解决celery Django:如何仅在被 celery beat 调用而不是从 django 调用时才允许记录

我正在使用

celery - 5.0.5 (singularity)
django version 3.1.7
python 3.7.9

我有一个重要的任务,它每小时在 Django 中使用 celery 运行

Folder Structure

--src
    -- project
        -- __init__.py
        -- settings.py
        -- celeryapp.py
    -- someapp
        -- tasks.py
-- LOGS
    -- hourly_task   <-- want to store the logs from task_every_1_hour only when called using celery
        -- timestamp.log  <--- the timestamp will be time of the log file when created.

__init__.py

from .celeryapp import app as celery_app

__all__ = ['celery_app']

celeryapp.py

import os
from celery import Celery
import django

os.environ.setdefault('DJANGO_SETTINGS_MODULE','project.settings')


#This defines the celery app instance
redis = 'redis://:passws@localhost:6379/0'
app = Celery(dirname,broker=redis,backend=redis
    )

# list all the repeated tasks
app.conf.beat_schedule = {
    "task_very_1_hour": {
    "task": "someapp.tasks.runEveryOneHour","schedule": 3600.0
    }
}

app.autodiscover_tasks()

someapp.tasks.py

@celery_app.task
def runEveryOneHour():
    some code here

我想用时间戳作为文件登录。为此,我通常做的是

def create_logger():
    logger = logging.getLogger('runEveryOneHour')
    logger.setLevel(logging.INFO)
    dir = /full-path-to/LOGS/hourly_task

    current_time = datetime.datetime.Now().strftime("%Y-%m-%dT%H__%M__%s")
    file1 = current_time+".log"
    filename1 = os.path.join(dir,file1)
    handler = logging.FileHandler(filename1,mode='w')
    logger.addHandler(handler) 

@celery_app.task
def runEveryOneHour():
    create_logger()
    logger = logging.getLogger('runEveryOneHour')
    logging.info("Task Started)
    some code here
    logging.info("Task Ended)

每当 runEveryOneHour 每小时运行一次时,此方法是否有效

但我在很多地方使用这个功能,在我的 django 视图中需要时。

所以我不想让它做日志记录。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。