Найти - Пользователи
Полная версия: Celery, обновление статуса задачи по таймеру
Начало » Python для экспертов » Celery, обновление статуса задачи по таймеру
1
moskrc
Последовательно запускаются shell скрипты, выполнение почти всех из них не занимает очень много времени кроме одного, этот shell скрипт (A) выполняется минут 15.

Когда этот скрипт работает - имеется возможность узнать состояние выполнения через другой скрипт (B).

Как можно сделать выполнение скрипта B по таймеру пока выполняется скрипт A чтобы обновить статус этой долгой задачи.

Схематично:

@task
def create_new_machine(server):
	for i in range(0,10):
		if i == 4:
			# shell скрипт A
			sleep(100500)
		else:
			# оставшиеся скрипты
			sleep(1)
		current_task.update_state(state='PROGRESS', meta={'process_percent': 'data': custom_data, 'step': i})
Alen
Слишком много решений можно предложить, но самое банальное запускать “скрипт B” из “скрипта А”:

scriptA.sh
#!/bin/bash
# Запуск скрипта мониторинга
./scriptB.sh &
sleep 10;
# А теперь его прикончим.
kill -9 $!

scriptB.sh
#!/bin/bash
# Какой-то большой цикл
for i in `seq 100500`;  do
  sleep 1;
  echo $i;
done
Alen
чтобы обновить статус этой долгой задачи

А тут вам или поток или процесс отдельный придется делать.
http://stackoverflow.com/questions/375427/non-blocking-read-on-a-subprocess-pipe-in-python
moskrc
Вообщем я решил забить на сложности с Celery, решение: в JS цикле на стороне клиента (где progressbar рисуется) когда появится нужный мне STEP_NUM дергать тот опрашивающий скрипт через jQuery и подрисовывать на страницу блок с результатом его выполнения.
Alen
moskrc
решение: в JS цикле на стороне клиента (где progressbar рисуется) когда появится нужный мне STEP_NUM дергать тот опрашивающий скрипт через jQuery и подрисовывать на страницу блок с результатом его выполнения

Можно и так, но если нагрузка высокая лучше тогда отдельный сервсис сделать на websocket.
moskrc
Alen
Можно и так, но если нагрузка высокая лучше тогда отдельный сервсис сделать на websocket.

Да, ты прав. Просто тут внутренний проект, большой нагрузки не будет… Вроде все будет хорошо. Спасибо!
sypper-pit
а чем вас не устраивает работа через крон с перепроверкой процессов в состоянии ?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB