• 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

  • 相关阅读:
    服务器运维
    mysq配置
    PHP-FPM进程数的设定
    vsftpd 安装配置详细教程
    php-fpm性能优化
    如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
    搭建linux+nginx+mysql+php环境
    PHP 页面编码声明方法详解(header或meta)
    Linux内核的一些知识。
    Connector框架笔记
  • 原文地址:https://www.cnblogs.com/limengda/p/11221590.html
Copyright © 2020-2023  润新知