我正在开发一个通过 https 请求与服务器通信的应用程序。我需要一条消息在非常短的时间窗口内到达服务器。我知道这个时间窗口的开启时间,精度只有半秒。我可以在之前和之后尽可能多地重复http请求,这没关系。
现在,这是我正在做的:
- 我将 Python 与请求和 gevent 模块结合使用
- 我创建了一个请求 session ,使用带有 1000 个连接的连接池的 httpadapter
我在时间窗口周围的 1 秒内发送尽可能多的订单。
self.session = requests.Session() self.session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=10000)) def sendRequest() self.session.post(self.url, self.body) pool = gevent.pool.Pool(size = 10000) while time.time() < endTime: g = pool.spawn(sendRequest) gevent.sleep(0.0000001)
但是,我总是错过那个非常狭窄的窗口。我的代码似乎只发送 2 毫秒的 http 请求,即使我增加池大小或 我正在尝试提高发送消息的速度,以增加点击窗口的机会。但是,我不确定该怎么做。
我想知道:
- 网卡是瓶颈吗?
- Python 是瓶颈吗?
- 我是否在我的代码中做了一些次优的事情(https 连接池的大小、gevent 的使用等)
- 知道如何做好这件事吗?
最佳答案
我最终直接使用了 socket 模块,因此在较低级别控制了行为,并且成功了。请求模块很棒,但为这个特定问题增加了太多延迟。
关于python - 在特定时间发送 Http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737603/