Форум сайта python.su
в Джанге у меня есть модель:
class User(models.Model): name = models.CharField(max_length=100) def __init__(self, name): self.name = name def __str__(self): return self.name def search(self, url): while True: time.sleep(0.5) response = requests.get(url, params={}) print(response) # проверка, выполняется ли метод # далее обрабатываем ответ и шлем новый запрос
from .models import User def my_view(request): user_name = request.GET.get('user') user = User.objects.create(name=username) user.search(url='какой-то-url')
user = User.objects.get(name='username') user.delete()
Отредактировано AlexReznikov (Окт. 21, 2017 15:33:06)
Офлайн
Чот я вообще не понял, что за бред тут происходит. Опишите как-нибудь более понятно, зачем вы в модели отправляете куда-то какие-то запросы?
Офлайн
Смысл такой: к вебсокету подключается клиент, создается пользователь, и с его данными должны отправляться запросы. Если клиент отключается от сокета, пользователя нужно удалить и выполнение запросов остановить
Офлайн
AlexReznikov
Веб так не работает, веб - это короткая сессия запрос-ответ и чем короче, тем лучше. Вам нужна фоновая задача, которая будет посылать запросы на сторонний сервис в отдельном процессе, это можно организовать разными способами, например с помощью http://www.celeryproject.org/ или с помощью https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ или как-то еще, в любом случае my_view(request) не должна блокировать wsgi-приложение надолго, иначе вы просто заДДОСите сами себя, ваш сервер перестанет откликаться на запросы.
Офлайн
Я понимаю, что вэб - это запрос и ответ. Поэтому и хочу использовать Websocket, чтобы в этот сокет слать сообщения длительное время. Для организации сокетов использую django channels. И все прекрасно работает, за исключением того, что когда клиент разрывает подключение к сокету, скрипт продолжает выполняться. И никак не могу понять как его прибить. Celery - это хорошо, но это очередь, а мне не нужна очередь, клиент не должен ждать пока предыдущий клиент закончит свою работу и воркер примется обрабатывать его. мне нужно real-time выполнение
Офлайн