我想发送数十个POST请求,每个请求之间相隔50毫秒。所有请求都相同。它们大约需要315毫秒(发送时间+延迟),但是由于一个原因,我忽略了四个请求(平均)要花两到三倍的时间(请参阅下面的Charles Proxy时间轴图表)。
有人可以向我解释为什么吗?是因为多线程的实现不正确(请参见下面的代码)?
import thread
import time
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
url = XXX
req_data = XXX
session = requests.Session()
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
session.cookies.clear()
def send_request(url, data):
r = session.post(url, verify=False, data=data)
for i in range(20):
time.sleep(0.050)
thread.start_new_thread( send_request, (url, req_data,) )
来自Charles文档的传说:
图表上的每个条形图均分为三个部分:
- 请求-发送(上传)请求(深蓝色)所花费的时间
- 延迟-等待网络延迟或服务器上的处理时间所花费的时间(蓝色)
- 响应-接收(下载)响应(浅蓝色)所花费的时间
编辑:
我分析了通过Wireshark进行的连接,以下是〜300ms请求和〜800ms请求的示例。
似乎800ms比300ms多两个ACK数据包。任何人都知道这两个请求之间发生了什么以及有什么不同?
答案 0 :(得分:1)
使用Wireshark进行的数据包分析(请参阅主帖子中的编辑)显示,两个查询(一个很长的查询)之间的500ms间隔来自SSL密钥交换时的ACK数据包。
提醒一下,我所有的请求都通过代理Charles Web Proxy。
经过一些测试,似乎问题出在与Charles进行SSL验证(有时会增加500ms的请求上传时间)。
在以下情况下,查询具有相等的发送时间和常规的发送时间:
感谢您的帮助:)
此答案显示了Charles Web Proxy的SSL认证与该问题之间的联系,但并没有对此进行详尽解释