Имитировать задержку зрения Джанго во сне - PullRequest
0 голосов
/ 07 мая 2018

В моем приложении django пользователи могут задавать некоторые задержки (в секундах) для определенных действий - оно используется для имитации сетевых задержек.

Вполне возможно, что я закончу с сотнями таких событий.

То, что я реализовал до сих пор, с точки зрения моего django, я просто делаю:

class NetworkDelayView(View):
    def dispatch(self, request, *args, **kwargs):
        obj = Event.objects.get(short_uuid=kwargs.get('uuid'))
        if obj.enable_delay:
             sleep(obj.delay)
        return super().dispatch(request, *args, **kwargs)

Я не уверен, что это лучший способ сделать это по нескольким причинам:

  • потоков - насколько я понимаю, он будет блокировать все запросы

  • Я запускаю свои приложения django / python на производстве на виртуальном хостинге, используя пассажирские

Любые предложения, если это правильный способ сделать это? Может быть, есть лучший способ.

1 Ответ

0 голосов
/ 07 мая 2018

Вышеуказанный подход совсем не годится. Вы должны запланировать задачу и выполнить все действия в этой задаче. Задание будет выполнено после задержки, и вы не будете заблокированы для дальнейших запросов. Используйте сельдерей для асинхронной задачи.

https://realpython.com/asynchronous-tasks-with-django-and-celery/

Используйте coundown для задержки задачи на некоторое время.

http://docs.celeryproject.org/en/latest/userguide/calling.html#eta-and-countdown

...