django慢回复

时间:2017-10-18 21:54:43

标签: python django

我一直在尝试通过在raspberry pi 3上创建一个服务器来学习python和django,以接受来自房子周围的一些物联网项目的数据。

我已经设置了服务器并成功设法将数据发送到网址。但是,我发现POST请求大约需要1秒。如果我想要几个IoT设备将数据反馈给pi,这太慢了。

@csrf_exempt
def update(request):

  if request.method == "POST":
    key = request.POST.get("key", "")

    if key == settings.API_KEY:
        deviceID = request.POST.get("id", "")
        format = request.POST.get("format", "")
        datatype = request.POST.get("datatype", "")
        data = request.POST.get("data", "")

        fields = [format,datatype,data]

        WriteFields(deviceID,fields)
        return JsonResponse({"result": "received"})
    else:
        return JsonResponse({"error": "invalid_key"})

return JsonResponse({"error": "no_post"})

我运行了一个快速脚本来测试POST率

import requests

for i in range(100):
    r = requests.post("http://heimdall:8000/sensors/update/", data={'key': 'testkey', 'id': '123456', 'format': 'temp', 'datatype': 'c', 'data': '12'})
    print(r.status_code, r.reason)

django终端的时间戳显示每1秒的响应。为了消除pi是瓶颈,我在基于i3的Plex媒体服务器上运行了相同的django项目,我得到了类似的结果。
我还测试了从Windows cmd行使用CURL发送POST请求并查看相同的响应时间。这是POST的基本限制吗?或者问题可能出现在我的项目中?

更新
我从Update函数中删除了大部分代码并重新运行

@csrf_exempt
def update(request):
    if request.method == "POST":
        key = request.POST.get("key", "")
    return JsonResponse({"test": "test"})

但回复率仍在1s左右 我还注意到有关使用aiohttp的评论,我接下来会对此进行调查 我尝试在settings.py中设置DEBUG = False,但没有任何更改。

UPDATE2
有趣的是,实际上在我的nodemcu esp8266 IoT设备上运行请求我没有看到这个延迟... Arduino控制台的串行输出不会暂停1秒,它仍然成功地从服务器读取响应。

0 个答案:

没有答案