zoukankan      html  css  js  c++  java
  • Celery定时任务|计划任务

    适用场景几点几分执行特定的任务

    定时任务

    配置这个无需多说了和上篇文章一样

    任务函数

    硬菜来了 添加任务时候的写法

    第一种:

    from celery_task.order_task import order_add
    from celery_task.user_task import user_add
    
    
    from datetime import datetime
    
    # 拼接得到执行任务的时间,得到的就是一个时间对象
    v1 = datetime(2019, 7, 21, 16, 53, 00)
    print('执行任务时间:', v1)
    # 转化成utc时间
    v2 = datetime.utcfromtimestamp(v1.timestamp())
    print('执行任务的utc时间:', v2)
    # 执行定时任务,调用apply_async,args是要传入的参数,eta是执行的时间
    result = user_add.apply_async(args=[1, 3], eta=v2)
    print(result.id)

    这里面需要把时间转化成utc时区的时间,不然间隔十小时,自己推算即可

    唯一变的就是传递参数的调用变成了apply_async(args=[参数,参数],eta=执行任务的时间)

    worker日志

    接收到任务到时间 16:52:17

    任务执行完成的时间 16:53:02

    任务耗时2秒

    第二种

    # 获取当前时间
    ctime = datetime.now()
    # 默认用utc时间,把当前时间转utc时间
    utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
    from datetime import timedelta
    
    # 这段意思是取十秒之后的时间对象,因为时间对象只能和时间对象相加
    time_delay = timedelta(seconds=10)
    # 最终的时间对象为当前时间后十秒
    task_time = utc_ctime + time_delay
    print('最终时间', task_time)
    
    # 使用apply_async并设定时间
    result = user_add.apply_async(args=[4, 3], eta=task_time)
    print(result.id)

    打印信息

     worker日志信息

    执行计划任务

    from datetime import timedelta
    from celery.schedules import crontab
    
    APP.conf.beat_schedule = {
        # 名字随意命名
        'add-every-10-seconds': {
            # 执行tasks1下的test_celery函数
            'task': 'celery_task.tasks1.test_celery',
            # 每隔2秒执行一次
            # 'schedule': 1.0,
            # 'schedule': crontab(minute="*/1"),
            'schedule': timedelta(seconds=2),
            # 传递参数
            'args': ('参数', '参数')
        },
        'add-every-12-seconds': {
            'task': 'celery_task.tasks1.test_celery',
            #  每年4月11号,8点42分执行
            'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4),
            'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4),
            'args': (16, 16)
        },
    }

    启动一个beat自定提交任务:celery beat -A celery_tasks.tasks -l info

  • 相关阅读:
    HDU 2639 Bone Collector II (01背包,第k解)
    POJ 2184 Cow Exhibition 奶牛展(01背包,变形)
    hihoCoder #1165 : 益智游戏 (挑战赛11 B题)
    UVA 562 Dividing coins 分硬币(01背包,简单变形)
    POJ Charm Bracelet 挑饰品 (常规01背包)
    hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)
    UVA 624 CD(01背包,要记录路径)
    118 Pascal's Triangle 帕斯卡三角形 杨辉三角形
    117 Populating Next Right Pointers in Each Node II 每个节点的右向指针 II
    116 Populating Next Right Pointers in Each Node 每个节点的右向指针
  • 原文地址:https://www.cnblogs.com/limengda/p/11221590.html
Copyright © 2011-2022 走看看