在我的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应用程序
任何建议,如果它是一个正确的方法这样做?也许有更好的方法。
答案 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