Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python django长轮询等待_Python_Django_Django Rest Framework - Fatal编程技术网

python django长轮询等待

python django长轮询等待,python,django,django-rest-framework,Python,Django,Django Rest Framework,我使用Django和Rest框架。为了将最新更新返回给其他客户端,我做了一个长时间的轮询 为了等待长时间的轮询,我使用了time.sleep(秒)函数。但这似乎只适用于做出改变的客户。其他客户似乎被困在某个地方 您能建议在Python Django中等待长时间轮询的正确方法吗 class ChangedItemsPollingView(APIView): permission_classes = [permissions.IsAdminUser] def get(self, r

我使用Django和Rest框架。为了将最新更新返回给其他客户端,我做了一个长时间的轮询

为了等待长时间的轮询,我使用了time.sleep(秒)函数。但这似乎只适用于做出改变的客户。其他客户似乎被困在某个地方

您能建议在Python Django中等待长时间轮询的正确方法吗

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([])
class ChangedItemsPollingView(APIView):
权限\u类=[permissions.isadmin用户]
def get(自我,请求):
request\u received\u time=datetime.datetime.now()
十秒之后=收到请求时间+日期时间.timedelta(秒=10)
while(datetime.datetime.now()<10秒后):
更改的项目=资产.对象.过滤器(在收到请求时更新)
如果(更改的项目):
tmpJson=djangoSerializers.serialize('json',已更改\u项)
tmpObj=json.loads(tmpJson)
返回响应(tmpObj)
时间。睡眠(3)
返回响应([]))

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

  • 它仍在等待结果的信息
  • 如果结果可用,则返回结果
您不应该在
get()
方法中执行长时间运行的操作。您应该在后台对其进行排队和处理(例如芹菜)

例如:

类轮询视图(APIView):
def get(自我,请求):
# ...
如果result.u可用():
返回响应(result.json())
返回响应({“status”:“waiting”})

是,但长轮询应该等待,而不是发送响应。它怎么能暂停响应。你在前端等待,而不是后端。我想在前端等待不是一个漫长的轮询。。?我指的是这篇文章。代码正常,但当重复请求相同的URL时,Chrome浏览器会在缓存模式下运行。它返回缓存的值,而不接触服务器。