Форум сайта python.su
Последовательно запускаются 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})
Офлайн
Слишком много решений можно предложить, но самое банальное запускать “скрипт B” из “скрипта А”:
scriptA.sh
#!/bin/bash # Запуск скрипта мониторинга ./scriptB.sh & sleep 10; # А теперь его прикончим. kill -9 $!
#!/bin/bash # Какой-то большой цикл for i in `seq 100500`; do sleep 1; echo $i; done
Офлайн
чтобы обновить статус этой долгой задачи
Офлайн
Вообщем я решил забить на сложности с Celery, решение: в JS цикле на стороне клиента (где progressbar рисуется) когда появится нужный мне STEP_NUM дергать тот опрашивающий скрипт через jQuery и подрисовывать на страницу блок с результатом его выполнения.
Офлайн
moskrc
решение: в JS цикле на стороне клиента (где progressbar рисуется) когда появится нужный мне STEP_NUM дергать тот опрашивающий скрипт через jQuery и подрисовывать на страницу блок с результатом его выполнения
Офлайн
Alen
Можно и так, но если нагрузка высокая лучше тогда отдельный сервсис сделать на websocket.
Офлайн
а чем вас не устраивает работа через крон с перепроверкой процессов в состоянии ?
Офлайн