Я разрабатываю веб-сайт, используя Django. У меня около 50 функций. На получение результата для всех из них уходит около 1 минуты.
Проблема в том, что я использую heroku для своего приложения. И у heroku есть лимит 30 se c на получение запроса. Мне предложили использовать фоновые задачи. Теперь я использую фоновые задания в Python RQ. Для каждой функции я сделал отдельную задачу в Views. Вот пример одной из задач:
task_robots_url = q.enqueue(Robots(url).get_url)
robots_url = task_robots_url.result
А теперь мне нужно проверить, завершено ли задание в шаблоне. И когда он закончится, отобразите результат.
Я хочу проверять с JS каждую секунду, завершена ли работа. Если он не закончен - показать пользователю сообщение «Загрузка ...». Если закончил - покажи результат.
Вот мой JS код:
<script>
var h1 = document.getElementById("h1");
var job_result = "{{ robots_url }}"
var test = function () {
if (job_result == "") {
h1.innerText = "Waiting...";
} else if (job_result == "None") {
h1.innerText = "Waiting ...";
} else if (job_result == undefined) {
h1.innerText = "Waiting ...";
} else {
clearInterval(inter);
h1.innerText = job_result;
}
}
var inter = setInterval(test, 1000);
</script>
Но это не работает. Когда начинается страница результатов - у меня пустой результат. И он отображает "Ожидание". Тогда у меня нет результата. И он по-прежнему отображает "Ожидание". Но теперь после ожидания результата нет.
В документации для Python RQ сказано, что я должен поместить time.sleep () на несколько секунд в свой код. А если поставить time.sleep (2) - результат получил. Но если я поставлю time.sleep (2) для каждой из моих 50 функций - я получу 100 se c. И ограничение в Heroku составляет всего 30 сек c ... Поэтому мне нужно проверить и отобразить результат без sleep () ...