Любой способ заставить @periodic_task работать только по вызову, он запускается автоматически при запуске проекта?
Есть ли способ сделать periodic_task
бегать только по вызову, я вижу Pingit()
начинается, как только я запускаю свое django-приложение python manage.py runserver
@periodic_task(run_every=crontab(minute="*/1"),options={"task_id":task_name})
def Pingit():
print('Every Minute Im Called')
Я хотел бы, чтобы он запускал периодическое задание, только если я вызову его по Pingit
,
1 ответ
Решение
Вы можете лучше использовать @task
для этого и заставить его ставить себя в очередь после выполнения, например:
@app.task
def pingit(count=0):
if count < 60 * 24 * 7: # 7 days in minutes
print('Every Minute Im Called')
# Queue a new task to run in 1 minute
pingit.apply_async(kwargs={'count': count + 1}, countdown=60)
# Start the task manually
pingit.apply_async()
Если вам нужно добавить позиционные аргументы в функцию, вы можете указать те с args
, Например, чтобы передать name
аргумент:
@app.task
def pingit(name, count=0):
if count < 60 * 24 * 7: # 7 days in minutes
print('Every Minute Im Called')
# Queue a new task to run in 1 minute
pingit.apply_async(args=[name], kwargs={'count': count + 1}, countdown=60)
# Start the task manually
pingit.apply_async(args=['MyName'])