Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как остановить выполнение метода при удалении объекта [RSS Feed]

#1 Окт. 21, 2017 15:31:11

AlexReznikov
Зарегистрирован: 2017-10-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как остановить выполнение метода при удалении объекта

в Джанге у меня есть модель:

 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) # проверка, выполняется ли метод
            # далее обрабатываем ответ и шлем новый запрос
Во views я создаю экземпляр класса этой модели и запускаю метод search
 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()
Но запросы по-прежнему идут и выводятся командой print. Каким образом прекратить выполнение метода при удалении объекта?

Отредактировано AlexReznikov (Окт. 21, 2017 15:33:06)

Офлайн

#2 Окт. 21, 2017 16:45:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как остановить выполнение метода при удалении объекта

Чот я вообще не понял, что за бред тут происходит. Опишите как-нибудь более понятно, зачем вы в модели отправляете куда-то какие-то запросы?



Офлайн

#3 Окт. 22, 2017 03:11:22

AlexReznikov
Зарегистрирован: 2017-10-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как остановить выполнение метода при удалении объекта

Смысл такой: к вебсокету подключается клиент, создается пользователь, и с его данными должны отправляться запросы. Если клиент отключается от сокета, пользователя нужно удалить и выполнение запросов остановить

Офлайн

#4 Окт. 22, 2017 10:17:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как остановить выполнение метода при удалении объекта

AlexReznikov
Веб так не работает, веб - это короткая сессия запрос-ответ и чем короче, тем лучше. Вам нужна фоновая задача, которая будет посылать запросы на сторонний сервис в отдельном процессе, это можно организовать разными способами, например с помощью http://www.celeryproject.org/ или с помощью https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ или как-то еще, в любом случае my_view(request) не должна блокировать wsgi-приложение надолго, иначе вы просто заДДОСите сами себя, ваш сервер перестанет откликаться на запросы.



Офлайн

#5 Окт. 24, 2017 04:56:21

AlexReznikov
Зарегистрирован: 2017-10-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как остановить выполнение метода при удалении объекта

Я понимаю, что вэб - это запрос и ответ. Поэтому и хочу использовать Websocket, чтобы в этот сокет слать сообщения длительное время. Для организации сокетов использую django channels. И все прекрасно работает, за исключением того, что когда клиент разрывает подключение к сокету, скрипт продолжает выполняться. И никак не могу понять как его прибить. Celery - это хорошо, но это очередь, а мне не нужна очередь, клиент не должен ждать пока предыдущий клиент закончит свою работу и воркер примется обрабатывать его. мне нужно real-time выполнение

Офлайн

  • Начало
  • » Django
  • » Как остановить выполнение метода при удалении объекта[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version