from celery import Celery from celery.schedules import crontab from app.core.config import settings # 创建 Celery 应用 celery_app = Celery( 'ipam_tasks', broker=settings.CELERY_BROKER_URL, backend=settings.CELERY_RESULT_BACKEND ) # 配置 celery_app.conf.update( task_serializer='json', accept_content=['json'], result_serializer='json', timezone='Asia/Shanghai', enable_utc=True, task_track_started=True, task_time_limit=30 * 60, # 任务超时30分钟 worker_prefetch_multiplier=1, worker_max_tasks_per_child=1000, ) # 必须在配置后导入并注册任务 from app.tasks.scan_tasks import register_tasks _tasks = register_tasks(celery_app) # 导出任务函数 scan_network_task = _tasks['scan_network_task'] scan_single_ip_task = _tasks['scan_single_ip_task'] full_network_scan = _tasks['full_network_scan'] update_all_statistics = _tasks['update_all_statistics'] quick_status_update = _tasks['quick_status_update'] # 定时任务配置 celery_app.conf.beat_schedule = { # 每小时执行一次全量扫描 'full-scan-every-hour': { 'task': 'app.tasks.scan_tasks.full_network_scan', 'schedule': 3600.0, # 每小时 'args': (True, True, True) # ping, arp, dns }, # 每天凌晨2点执行一次完整扫描 'full-scan-daily': { 'task': 'app.tasks.scan_tasks.full_network_scan', 'schedule': crontab(hour=2, minute=0), 'args': (True, True, True) }, # 每15分钟更新一次统计 'update-stats-every-15min': { 'task': 'app.tasks.scan_tasks.update_all_statistics', 'schedule': 900.0, # 15分钟 }, }