How can I schedule a Task to execute at a specific time using celery?

后端 未结 5 1553
忘掉有多难
忘掉有多难 2020-11-29 02:32

I\'ve looked into PeriodicTask, but the examples only cover making it recur. I\'m looking for something more like cron\'s ability to say \"execute

相关标签:
5条回答
  • 2020-11-29 02:58

    How you can read in this tutorial, you can make a PeriodicTask, i think if you have execute a task at 1 .am. Monday's morning is because you wan to run a long cpu/mem operation, rememeber celery use ampq for enqueue tasks.

    0 讨论(0)
  • 2020-11-29 03:03

    I have just submitted a patch to add a ScheduledTask to accomplish a small bit of time based scheduling versus period based:

    https://github.com/celery/celery/commit/e8835f1052bb45a73f9404005c666f2d2b9a9228

    0 讨论(0)
  • 2020-11-29 03:08

    The recently released version 1.0.3 supports this now, thanks to Patrick Altman!

    Example:

    from celery.task.schedules import crontab
    from celery.decorators import periodic_task
    
    @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon"))
    def every_monday_morning():
        print("This runs every Monday morning at 7:30a.m.")
    

    See the changelog for more information:

    http://celeryproject.org/docs/changelog.html

    0 讨论(0)
  • 2020-11-29 03:19

    Use

    YourTask.apply_async(args=[some, args, here], eta=when)
    

    And at the end of your task, reschedule it to the next time it should run.

    0 讨论(0)
  • 2020-11-29 03:19

    While @asksol's answer still holds, the api has been updated. For celery 4.1.0, I have to import crontab and periodic_task as follows:

    from celery.schedules import crontab
    from celery.task import periodic_task
    
    0 讨论(0)
提交回复
热议问题