使用库请求发送POST请求的问题

时间:2015-07-07 05:07:47

标签: python python-requests try-except

import requests
while True: 
    try:
        posting = requests.post(url,json = data,headers,timeout = 3.05)
    except requests.exceptions.ConnectionError as e: 
        continue
    # If a read_timeout error occurs, start from the beginning of the loop
    except requests.exceptions.ReadTimeout as e:  
        continue

指向更多代码的链接:Multiple accidental POST requests in Python 此代码使用requests库无限期地执行POST请求。我注意到,当尝试多次失败并且while循环多次启动时,当我最终发送post请求时,我会在同一秒发现服务器端的多个条目。我同时写了一个txt文件,它只显示了一个条目。每个条目是5个读数。这是图书馆本身的问题吗?有没有办法来解决这个问题?!无论我把它放在什么样的条件下它仍然无法工作:/! You can notice the reading at 12:11:13 has 6 parameters per second while at 12:14:30 (after the delay, it should be every 10 seconds) it is a few entries at the same second!!! 3 entries that make up 18 readings in one second, instead of 6 only!

1 个答案:

答案 0 :(得分:2)

看起来服务器收到你的请求并对它们采取行动但是没有及时响应(3s是一个非常低的超时,负载尖峰/分页操作很容易让服务器错过它,除非它采用特殊措施)。我建议

  • 异步处理请求(例如,生成线程; Asynchronous Requests with Python requests讨论如何使用requests)并且不使用超时(TCP有自己的超时,让它失败)。
  • reuse the connection(s)(TCP有很多连接建立/中断的开销)或使用UDP代替。
  • 包含一些“提示”(ID,时间戳等)以防止服务器添加重复记录。 (我称之为解决方法,因为真正的问题是你没有确定你的请求是否得到处理。)

从服务器端,您可能想要:

  • 尽快回应,然后根据信息采取行动。不要让待处理的操作阻止回复进一步的请求。