#python #django #django-models #django-rest-framework #django-views
Вопрос:
Я вызвал первую функцию «a1», и она начинает выполняться в цикле, и когда я вызвал вторую функцию «a2», первая функция «a1» должна остановиться, а вторая функция должна начать выполняться, но две функции выполняются параллельно. Мне нужно остановить первую функцию при вызове второй функции.
def a1(request):
if request.method == "POST":
add = request.POST['addition']
while True:
add = add 1
print(add)
time.sleep(2)
return render(request, blog/finished.html)
def a2(request):
if request.method == "POST":
check = request.POST['checking']
while True:
print(check)
print("second function: ",check)
time.sleep(2)
return render(request, blog/finished.html)
Комментарии:
1. Использование
while True
withtime.sleep
ничего не вернет в ваших функциях обработчика запросов. Я думаю, именно поэтому вы задали вопрос. Я бы рекомендовал прочитать Django, инструменты управления очередями и решения celery (или аналогичные), чтобы более тщательно обработать вашу ситуацию. Они могут помочь вам улучшить управление состоянием и бизнес-логику, подобную этой.2. Когда клиент отправляет HTTP-запрос, он обычно ожидает получения ответа вскоре после этого. Если задействованные длительности превышают несколько секунд, вам следует обратить внимание на асинхронные решения. Большинство браузеров будут показывать ошибку тайм-аута, если они не получат ответ через некоторое время. Кроме того, хорошо настроенные веб-серверы будут прерывать процессы Django, которые занимают слишком много времени.
Ответ №1:
Два запроса выполняются независимо, поэтому они не могут напрямую взаимодействовать друг с другом. Вам понадобятся какие-то средства отслеживания состояния запроса a1. В Django вы можете сделать это с помощью таблицы базы данных, которая может записывать состояние a1 (например, running). Затем a2 может обновить это состояние до «остановлено», которое a1 должен будет опросить, чтобы выяснить, должно ли оно прекратить выполнение или нет.
Я проигнорировал, почему вы хотели бы это сделать, потому что преднамеренное включение запросов в цикл со спящими режимами приведет к ограничению ресурсов на веб-сервере и может привести к проблемам с производительностью.
Комментарии:
1. Не могли бы вы помочь мне в настройке таблицы базы данных?
2. лучшее место для начала — учебник по django
3. Использование базы данных, подобной redis, может быть более подходящим в этом случае. По крайней мере, это может быть второй вариант.
Ответ №2:
Вам следует заглянуть в Django-channels .
Это хороший учебник и документация: https://channels.readthedocs.io/en/stable /
Таким образом, несколько пользователей / страниц могут взаимодействовать с одним и тем же процессом и получать данные из этого процесса без особых проблем на веб-сервере.
Для этого используется Redis, так что будьте готовы к этому