我需要实现一个脚本来尽快发送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倍。有没有更好的方法来加快这个过程?