如何解决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 举报,一经查实,本站将立刻删除。