2015-06-25 2 views
2

Возможно ли контролировать состояние задачи сельдерея без опроса?Мониторинг состояния задачи сельдерея без опроса?

Например, если у меня есть задача, которая периодически обновляет свое состояние с помощью update_state:

@task(bind=True) 
def my_task(self): 
    for x in range(100): 
     time.sleep(1) 
     self.update_state(state='PROGRESS', meta={'x': x}) 

Можно ли контролировать это состояние от другого процесса без опроса?

ответ

2

Я еще не сделал этого сам, так что это не полный ответ, но я заинтересован в решении той же проблемы. У меня есть три идеи заслуживает внимания:

1

Это зависит от вашего брокера/бэкэнд. Если они используют pub/sub, тогда вашему процессу не потребуется опросить состояние задачи. Если они этого не сделают, вам нужно будет опросить (или, в более общем плане, процесс, связанный с отправкой сообщения с запросом о состоянии).

Я думаю, что и сельдерей, и redis обладают такой способностью.

+0

«процесс не требует опроса состояния задачи» - но как он получит доступ к состоянию задачи? –

+0

Он подписывается ('pub/sub') на обновления – Maximilian

+1

Но как конкретно вы это делаете? Выделяет ли сельдерей API? –

0

Предполагая, что вы хотите отслеживать прогресс в своем продюсере, для этого вам потребуется использовать API мониторинга событий. Другие apis, обработчики и сигналы, работают только у рабочего; поэтому не использовать для отслеживания прогресса в производителе.

Просмотрите раздел «Руководство по мониторингу и управлению» в документах, и вы должны иметь возможность запускать примерный код (для приемника событий) почти дословно. Однако не упоминается, что для рабочего тоже необходимо создать событие. Аргумент -E для вашей работы исправит это.

Смежные вопросы