Хочу запустить скрипт Python от представлений django. И я не хочу ожидать до выполнения сценария. Сценарий Python должен сделать свою работу в фоновом режиме и в это время, я отправлю ответ клиенту, который "сценарий выполняет в фоновом режиме". Какая-либо Идея?
subprocess.Popen
является лучшим, если Вы хотите отправить непосредственный ответ. Но удостоверьтесь, что subprocess.Popen
не возвращает значения назад. т.е. необходимо использовать как ниже:
subprocess.Popen(["python","test.py"], close_fds=True)
И использование close_fds=True, наряду с которым, также помогает лучше.
Как только Вы говорите, "делают это в фоновом режиме", я собираюсь предложить Сельдерей . Это вовлекает рабочий RabbitMQ как локального демона, которого Сельдерей использует в качестве промежуточного хранилища данных и , Django может попросить, чтобы Сельдерей выполнил задачи .
, Если необходимо отследить состояние, после того как Вы добавляете задачу, можно получить UUID для него и затем запросить Сельдерей для состояния и/или просто иметь палку Сельдерея результат в стандартном Django ORM для Вас, что Вы опрашиваете (или используете webhooks, или независимо от того, что это - хипстеры, используют эти дни).
<час> таким образом, конечно, большое изучение и изрядное количество продолжающейся нагрузки для того, чтобы просто выполнить что-то в фоновом режиме. Вы можете всего делать это грязное subprocess.Popen
путь . Вы не получите вывода или получите любое состояние... Но это должно примерно работать.