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

  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/limengda/p/11221590.html
Copyright © 2011-2022 走看看