|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #from celery import Celery
- import celery.schedules
- from redbeat import RedBeatSchedulerEntry
- from datetime import timedelta
- from celery.schedules import crontab
-
- from celery_config import *
-
- from services.redis_service import RedisService
- from services.kafka_service import KafkaService
- from services.biz_service import BizService
-
- #from config import load_config,conf
- from urllib.parse import quote
- import asyncio,os,random,sys
- #from tasks import add_friends_task
- #from common.log import logger
-
- import logging
-
- logger = logging.getLogger('redbeat')
-
-
-
- scheduled_task_sync_wx_info_interval = 6000
- scheduled_task_add_contacts_from_chatrooms_interval=10
- environment = os.environ.get('environment', 'default')
- # if environment != 'default':
- # scheduled_task_sync_wx_info_interval = 60*11
- # scheduled_task_add_contacts_from_chatrooms_interval = 3600*24
- # if environment != 'test':
- # scheduled_task_add_contacts_from_chatrooms_interval = 60*10
-
-
- if environment == 'production':
- scheduled_task_sync_wx_info_interval = 60*10
- scheduled_task_add_contacts_from_chatrooms_interval = 60*11
- elif environment == 'test':
- scheduled_task_sync_wx_info_interval = 60*10
- scheduled_task_add_contacts_from_chatrooms_interval = 60*11
- else:
- scheduled_task_sync_wx_info_interval = 1000
- scheduled_task_add_contacts_from_chatrooms_interval=6
-
-
- # 定义定时任务列表 (任务 ID, 任务名称, 执行间隔秒, 任务参数)
- # tasks_schedule = [
- # #("redbeat:scheduled_task", "tasks.scheduled_task", 3, []),
- # #("redbeat:scheduled_task_sync_wx", "tasks.scheduled_task_sync_wx", 15, []),
- # ("redbeat:scheduled_task_sync_wx_info", "tasks.scheduled_task_sync_wx_info", scheduled_task_sync_wx_info_interval, [redis_config, kafka_config, gewe_config]),
- # #("redbeat:add_friends_task", "tasks.add_friends_task", random.randint(1, 10), [redis_config]), # 10分钟执行一次
- # ]
-
-
- # # 注册 RedBeat 任务
- # for task_id, task_name, interval, task_args in tasks_schedule:
- # redbeat_entry = RedBeatSchedulerEntry(
- # name=task_id,
- # task=task_name,
- # schedule=celery.schedules.schedule(timedelta(seconds=interval)),
- # args=task_args,
- # app=celery_app
- # )
- # redbeat_entry.save()
-
-
- # # 为 add_friends_task 生成随机的分钟和小时
- random_minute = random.randint(0, 59)
- random_hour = random.randint(0, 23) # 可以根据需要调整小时范围
-
-
- # 定义定时任务列表 (任务 ID, 任务名称, 执行间隔或调度, 任务参数)
- tasks_schedule = [
- # 其他任务保持不变
- ("redbeat:scheduled_task_sync_wx_info", "tasks.scheduled_task_sync_wx_info",
- celery.schedules.schedule(timedelta(seconds=scheduled_task_sync_wx_info_interval)),
- [redis_config, kafka_config, gewe_config]),
-
- # # add_friends_task 使用 crontab 随机时间
- # ("redbeat:add_friends_task", "tasks.add_friends_task",
- # crontab(minute=random_minute, hour='*'), # 每小时在随机分钟执行
- # # 如果想每天在随机时间执行,可以用: crontab(minute=random_minute, hour=random_hour)
- # [redis_config]),
- ("redbeat:scheduled_task_add_contacts_from_chatrooms", "tasks.scheduled_task_add_contacts_from_chatrooms",
- celery.schedules.schedule(timedelta(seconds=scheduled_task_add_contacts_from_chatrooms_interval)),
- [redis_config, kafka_config, gewe_config]),
- ]
-
- # # 注册 RedBeat 任务
- for task_id, task_name, schedule_obj, task_args in tasks_schedule:
- redbeat_entry = RedBeatSchedulerEntry(
- name=task_id,
- task=task_name,
- schedule=schedule_obj, # 现在使用 schedule_obj 而不是创建新的 schedule
- args=task_args,
- app=celery_app
- )
- redbeat_entry.save()
- # 如果是 add_friends_task,打印其随机调度信息
- if task_name == "tasks.add_friends_task":
- if isinstance(schedule_obj, crontab):
- print(f"已注册 `{task_name}` 任务,将在每小时的第 {random_minute} 分钟执行")
- logger.info(f"已注册 `{task_name}` 任务,将在每小时的第 {random_minute} 分钟执行")
- else:
- print('scheduled_task_sync_wx_info 定时任务载入成功!')
- logger.info(f"scheduled_task_sync_wx_info 定时任务执行载入成功!")
-
- def setup_schedule():
- # 初始化第一次执行(例如:5秒后执行)
- initial_run_in = 5
- entry = RedBeatSchedulerEntry(
- name='random-task',
- task='tasks.random_scheduled_task',
- schedule=timedelta(seconds=initial_run_in),
- app=celery_app
- )
- entry.save()
- print(f"Initial task scheduled in {initial_run_in} seconds")
-
- setup_schedule()
|