Любой способ заставить @periodic_task работать только по вызову, он запускается автоматически при запуске проекта? - PullRequest
0 голосов
/ 17 сентября 2018

Есть ли способ заставить 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 Ответ

0 голосов
/ 17 сентября 2018

Вам может быть лучше использовать @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'])
...