Найти - Пользователи
Полная версия: Как остановить выполнение метода при удалении объекта
Начало » Django » Как остановить выполнение метода при удалении объекта
1
AlexReznikov
в Джанге у меня есть модель:

 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. Каким образом прекратить выполнение метода при удалении объекта?
FishHook
Чот я вообще не понял, что за бред тут происходит. Опишите как-нибудь более понятно, зачем вы в модели отправляете куда-то какие-то запросы?
AlexReznikov
Смысл такой: к вебсокету подключается клиент, создается пользователь, и с его данными должны отправляться запросы. Если клиент отключается от сокета, пользователя нужно удалить и выполнение запросов остановить
FishHook
AlexReznikov
Веб так не работает, веб - это короткая сессия запрос-ответ и чем короче, тем лучше. Вам нужна фоновая задача, которая будет посылать запросы на сторонний сервис в отдельном процессе, это можно организовать разными способами, например с помощью http://www.celeryproject.org/ или с помощью https://docs.djangoproject.com/en/1.11/howto/custom-management-commands/ или как-то еще, в любом случае my_view(request) не должна блокировать wsgi-приложение надолго, иначе вы просто заДДОСите сами себя, ваш сервер перестанет откликаться на запросы.
AlexReznikov
Я понимаю, что вэб - это запрос и ответ. Поэтому и хочу использовать Websocket, чтобы в этот сокет слать сообщения длительное время. Для организации сокетов использую django channels. И все прекрасно работает, за исключением того, что когда клиент разрывает подключение к сокету, скрипт продолжает выполняться. И никак не могу понять как его прибить. Celery - это хорошо, но это очередь, а мне не нужна очередь, клиент не должен ждать пока предыдущий клиент закончит свою работу и воркер примется обрабатывать его. мне нужно real-time выполнение
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB