Django Celery Invoking периодически и вручную - PullRequest
0 голосов
/ 24 октября 2019

Я использую Django и Celery для планирования задач.

tasks.py

@periodic_task(run_every=crontab(hour='00', minute='00', day_of_week="*"))
def hello_world():
    print('hello world!)

В дополнение к ежедневному запуску функции, я должен иметь возможность вызывать ее вручную. Если пользователь нажимает кнопку во внешнем интерфейсе, он запускается. Я мог бы сделать:

@periodic_task(run_every=crontab(hour='00', minute='00', day_of_week="*"))
def hello_world():
    print('hello world!)

@task()
def hello_world():
    print('hello world!)

Но это идет вразрез с СУХОЙ. Кроме того, у меня может быть несколько функций с таким же сценарием. Мне нужно будет запускать его периодически, но также по запросу.

Я пробовал это:

def hello_world():
    print('hello world!)

@periodic_task(run_every=crontab(hour='00', minute='00', day_of_week="*"))
hello_world()

@task
hello_world()

Но это не работает. Я получаю

неверный синтаксис

Мне не удалось найти этот сценарий в документации или других ответах на стеке. Они говорят о вызове функции из оболочки. Помощь будет оценена.

Спасибо!

1 Ответ

2 голосов
/ 25 октября 2019

Вам не нужно определять задачу дважды, ваша периодическая задача также может быть вызвана вручную с помощью hello_world.delay(), поэтому у вас будет:

@periodic_task(run_every=crontab(hour='00', minute='00', day_of_week='*'))
def hello_world():
    print('hello world!')

def on_button_press():
    hello_world.delay()
...