通过睡眠模拟django视图中的延迟

时间:2018-05-07 18:16:35

标签: python django python-3.x django-views

在我的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 :(得分:0)

以上方法根本不好,您应该安排任务并执行该任务中的所有操作。任务将在延迟后运行,您不会被阻止进一步请求。使用celery进行异步任务。

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

使用coundown延迟任务一段时间。

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