2023年7月21日发(作者:)
pythonCelery定时任务的⽰例本⽂介绍了python Celery定时任务的⽰例,分享给⼤家,具体如下:配置启⽤Celery的定时任务需要设置CELERYBEAT_SCHEDULE 。
Celery的定时任务都由celery beat来进⾏调度。celery beat默认按照之中的时区时间来调度定时任务。创建定时任务⼀种创建定时任务的⽅式是配置CELERYBEAT_SCHEDULE:#每30秒调⽤m datetime import timedeltaCELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': '', 'schedule': timedelta(seconds=30), 'args': (16, 16) },}#crontab任务#每周⼀7:30调⽤m les import crontabCELERYBEAT_SCHEDULE = { # Executes every Monday morning at 7:30 A.M 'add-every-monday-morning': { 'task': '', 'schedule': crontab(hour=7, minute=30, day_of_week=1), 'args': (16, 16), },}使⽤数据库存储定时任务使⽤数据库存储定时任务需要设置CELERYBEAT_SCHEDULE如下:import datetimeimport jsonfrom djcelery import models as celery_modelsfrom import timezone#创建任务def create_task(name, task, task_args, crontab_time): ''' name # 任务名字 task # 执⾏的任务 "" task_args # 任务参数 {"x":1, "Y":1} crontab_time # 定时任务时间 格式: { 'month_of_year': 9 # ⽉份 'day_of_month': 5 # ⽇期 'hour': 01 # ⼩时 'minute':05 # 分钟 } ''' # task任务, created是否定时创建 task, created = celery_s. get_or_create(name=name,task=task) # 获取 crontab crontab = celery_s. filter(**crontab_time).first() if crontab is None: # 如果没有就创建,有的话就继续复⽤之前的crontab crontab = celery_s. create(**crontab_time) b = crontab # 设置crontab d = True # 开启task = (task_args) # 传⼊task参数 expiration = () + lta(day=1) s = expiration # 设置任务过期时间为现在时间的⼀天以后 () return True
#关闭任务def disable_task(name):'''关闭任务''' try: task = celery_(name=name) d = False # 设置关闭 () return True except celery_tExist: return True启动beat执⾏定时任务时, Celery会通过celery beat进程来完成。Celery beat会保持运⾏, ⼀旦到了某⼀定时任务需要执⾏时, Celerybeat便将其加⼊到queue中. 不像worker进程, Celery beat只需要⼀个即可。⽽且为了避免有重复的任务被发送出去,所以Celery beat仅能有⼀个。启动:python celery beat --loglevel=info其实还有⼀种简单的启动⽅式worker和beat⼀起启动:python celery worker --loglevel=info --beat定时删除由于很多任务都是⼀次执⾏完就不需要,留在数据库⾥就是垃圾数据了有没有办法清除。⽅法肯定有因为django-celery本⾝就有定时任务功能我们加个任务就解决了。好我们看代码:在django app⽬录中打开加⼊如下代码from djcelery import models as celery_modelsfrom import timezone@task()def delete(): ''' 删除任务 从models中过滤出过期时间⼩于现在的时间然后删除 ''' return celery_( expires__lt=()).delete()创建任务脚本⾥设置了 expires 1天以后过期,这样在filter的时候就能当做条件把过期的任务找到并且删除。以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689928997a295150.html
评论列表(0条)