django celery定时任务实战详解

 更新时间:2025年07月01日 10:53:59   作者:cleargy  
本文介绍了在Django项目中配置Celery定时任务的步骤,包括安装、参数设置、创建任务文件、启动任务及后台配置,最后整理项目结构,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧

一、celery依赖安装

# python 3.11版本
pip install celery redis django-celery-beat django_celery_results eventlet

二、celery 参数配置

django项目的settings.py中新增如下celery配置

##
INSTALLED_APPS = [
    ......
    'firewall_app',
    'django_celery_beat',    # 添加Celery应用
    'django_celery_results', # 添加Celery结果展示应用
]
# Celery Configuration Options
# 使用 Redis 作为消息代理
CELERY_BROKER_URL = 'redis://localhost:6379/0'  # 或 'amqp://guest:guest@localhost:5672//' 如果使用 RabbitMQ
CELERY_RESULT_BACKEND = 'django-db'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区
CELERY_ENABLE_UTC = True
# Celery Beat Settings (如果使用定时任务)
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler' # 如果希望在 Django Admin 中管理定时任务,需要安装 django-celery-beat
# 或者使用默认的本地调度器:
# CELERY_BEAT_SCHEDULER = 'celery.beat:PersistentScheduler'
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True
#日志输出配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': 'celery.log',  # 日志文件路径
        },
    },
    'loggers': {
        'firewall_app.tasks': {  # 匹配您的任务模块
            'handlers': ['file'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

三、celery定时任务

1、新建tasks.py

import logging
import time
from celery import shared_task
logger = logging.getLogger(__name__)
def run_crawler_logic():
    print("执行爬虫任务...")
    # 在这里调用 FortinetCrawler 或相关爬虫函数
    # crawler = FortinetCrawler()
    # crawler.run()
    time.sleep(10) # 模拟任务执行
    print("爬虫任务完成.")
def run_mapping_logic():
    print("执行漏洞映射任务...")
    # 在这里调用 map_vulnerabilities_for_all_firewalls 或相关函数
    # map_vulnerabilities_for_all_firewalls()
    # 推迟导入爬虫函数,避免循环引用
    time.sleep(5) # 模拟任务执行
    print("漏洞映射任务完成.")
@shared_task
def run_crawler_task():
    """Celery task for running the web crawler."""
    # 确保 Django 环境已设置 (如果任务需要访问 Django 模型)
    # 如果 Celery worker 和 Django 运行在同一环境,通常不需要手动设置
    # 但为了保险起见,可以加上
    # if not django.apps.apps.ready:
    #     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'firewall_monitor.settings')
    #     django.setup()
    logger.info("漏洞爬虫任务开始执行")
    run_crawler_logic()
    logger.info("漏洞爬虫任务完成")
    return "漏洞爬虫任务成功执行"
@shared_task
def run_firewall_mapping_task():
    """Celery task for running the firewall vulnerability mapping."""
    # 同上,确保 Django 环境
    # if not django.apps.apps.ready:
    #     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'firewall_monitor.settings')
    #     django.setup()
    logger.info("防火墙漏洞映射任务开始执行")
    run_mapping_logic() 
    logger.info("防火墙漏洞映射任务完成")
    return "防火墙漏洞映射任务成功执行" 

2、新建celery.py

import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
app = Celery('firewall_monitor')
# 使用 Django settings.py 中的配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现应用中的任务(最好指定tasks路径)
app.autodiscover_tasks(['mysite.tasks'])
@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

(3) __init__.py添加

from .celery import app as celery_app
__all__ = ('celery_app',)

四、celery任务启动

# 1、Redis-x64-5.0.14.1 window版本
# redis启动
redis-server.exe redis.windows.conf
# 2、启动djiango项目
python manage.py runserver 8000
# 3、celery beat启动
celery -A mysite beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
# 4、celery 任务启动
celery -A mysite worker --pool=solo -l info  -P eventlet

五、celery任务配置

启动djiango项目后,在Django-Admin后台配置定时任务。

六、celery项目结构

到此这篇关于django celery定时任务的文章就介绍到这了,更多相关django celery定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pymssql数据库操作MSSQL2005实例分析

    pymssql数据库操作MSSQL2005实例分析

    这篇文章主要介绍了pymssql数据库操作MSSQL2005的方法,可实现基本的连接、查询、插入、更新及调用存储过程等功能,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • Python 中 AttributeError: ‘NoneType‘ object has no attribute ‘X‘ 错误问题解决方案

    Python 中 AttributeError: ‘NoneType‘ obje

    Python “AttributeError: ‘NoneType’ object has no attribute” 发生在我们尝试访问 None 值的属性时,例如 来自不返回任何内容的函数的赋值, 要解决该错误,请在访问属性之前更正分配,本文通过示例给大家说明错误是如何发生的,感兴趣的朋友一起看看吧
    2023-08-08
  • 简单的抓取淘宝图片的Python爬虫

    简单的抓取淘宝图片的Python爬虫

    这篇文章主要介绍了简单的抓取淘宝图片的Python爬虫,方法比较简单,推荐给小伙伴们参考下。
    2014-12-12
  • 什么是Python包的循环导入

    什么是Python包的循环导入

    在本篇文章里小编给大家整理的是关于什么是Python包的循环导入的相关知识点,有兴趣的朋友们可以参考下。
    2020-09-09
  • Python 随机生成中文验证码的实例代码

    Python 随机生成中文验证码的实例代码

    Python 随机生成中文验证码的实例代码,需要的朋友可以参考一下
    2013-03-03
  • 使用Python实现有趣的锁屏小工具

    使用Python实现有趣的锁屏小工具

    这篇文章主要为大家详细介绍了如何使用Python实现有趣的锁屏小工具,这样再也不用担心因为没有锁屏被扣工资啦,打工人快跟随小编一起学习一下吧
    2023-12-12
  • Django发送html邮件的方法

    Django发送html邮件的方法

    这篇文章主要介绍了Django发送html邮件的方法,涉及Django框架操作邮件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • Python中的yield浅析

    Python中的yield浅析

    这篇文章主要介绍了Python中的yield浅析,对迭代器(iterator) 、生成器(constructor)一并做了分析,并用实例来说明,需要的朋友可以参考下
    2014-06-06
  • Python实现自动化拆分Word文档(按分节符与分页符)的完整教程

    Python实现自动化拆分Word文档(按分节符与分页符)的完整教程

    在处理大型 Word 文档时,我们经常需要将一个完整的文档拆分成多个独立的小文档,下面我们就来看看Python如何实现按分页符和分节符自动化拆分 Word 文档吧
    2026-04-04
  • Python小工具之消耗系统指定大小内存的方法

    Python小工具之消耗系统指定大小内存的方法

    今天小编就为大家分享一篇Python小工具之消耗系统指定大小内存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12

最新评论