How can I run a celery task at a given time, but only once?
I read the documentation and couldn't find any example of this.
You can use parameter eta when calling the task. Example:
eta
from datetime import datetime, timedelta @app.task() def hello(self): return 'hello world' tomorrow = datetime.utcnow() + timedelta(days=1) hello.apply_async(eta=tomorrow)
Documentation: http://docs.celeryproject.org/en/latest/userguide/calling.html#eta-and-countdown
Alternatively, when you want to call hello multiple times and to be sure it is executed only one at the time, you can use locking - more about it in the documentation: http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring-a-task-is-only-executed-one-at-a-time
hello
2.1m questions
2.1m answers
60 comments
57.0k users