python django长时间等待轮询



我使用带有Rest Framework的Django。我做了一个长轮询视图,以便将最新更新返回给其他客户端。

为了等待长时间的轮询,我使用了time.sleep(秒(功能。但这似乎只适用于做出改变的客户。其他客户似乎陷入了困境。

你能建议在PythonDjango中等待长时间轮询的正确方法吗?

class ChangedItemsPollingView(APIView):
permission_classes = [permissions.IsAdminUser]
def get(self, request):
request_received_time = datetime.datetime.now()
ten_seconds_later = request_received_time + datetime.timedelta(seconds=10)

while(datetime.datetime.now() < ten_seconds_later):
changed_items = Asset.objects.filter(updated_at__gt=request_received_time)
if(changed_items):
tmpJson = djangoSerializers.serialize('json', changed_items)
tmpObj = json.loads(tmpJson)
return Response(tmpObj)
time.sleep(3)

return Response([])

在长轮询中,您有返回的API端点:

  • 仍在等待结果的信息
  • 如果结果可用,则返回结果

不应该在get()方法中执行长时间运行的操作。您应该对它进行排队并在后台进行处理(例如使用芹菜(。

示例:

class PollingView(APIView):
def get(self, request):
# ...
if result.is_available():
return Response(result.json())
return Response({"status": "waiting"})

最新更新