我需要实现一个脚本来尽快发送 HTTP 请求。我试过eventlet + requests。如下所示的代码,请注意我已将超时值设置为1 秒。
import eventlet
eventlet.monkey_patch(all=False, socket=True)
import requests
params = {
'token': '???',
'data': '???'
}
def request_s(session, *args, **kwargs):
try:
return session.request(*args, **kwargs)
except:
pass # ignore first
finally:
pass
def send():
pile = eventlet.GreenPile(30)
s = requests.Session()
for i in range(100):
pile.spawn(request_s, s, 'https://api.???.com/', params=params, timeout=1)
# Fetch response
for response in pile:
if response:
print response.elapsed, response.text
if __name__ == '__main__':
send()
但是我遇到了一个奇怪的问题,那就是一些请求的经过时间会超过 1 秒。最大的大约是11 秒。为什么?
在这种情况下,eventlet + 请求仅比串行模型快 4 ~ 6 倍。有没有更好的方法来加快这个过程?