挑战:如何使用Python在一秒钟内发送> 1000个HTTP请求

Jac*_*cky 3 python python-requests

请考虑以下情况:有一个慢速服务器使用大约200毫秒来处理请求(不包括网络传输时间).现在,我们需要每秒发送一堆请求.

阅读这篇文章后,我尝试了多线程,多进程,twisted(agent.request)和eventlet.但最大的加速只有6倍,这是通过twisted和eventlet实现的,两者都使用了epoll.

以下代码显示了带有eventlet的测试版本,

import eventlet
eventlet.monkey_patch(all=False, socket=True)

import requests

def send():
    pile = eventlet.GreenPile(30)
    for i in range(1000):
        pile.spawn(requests.get, 'https://api.???.com/', timeout=1)
    for response in pile:
        if response:
            print response.elapsed, response.text
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我明确为什么加速这么低?有没有其他机制可以使它更快?

Era*_*gev 5

我知道这是一个老帖子,但有人可能仍然需要这个.

如果你想进行负载测试但想要使用python,那么你应该使用像locust这样的工具:http://locust.io/

这是我的解决方案,在10秒内产生了10,000个请求:

需要的包: sudo pip install grequests

码:

import grequests
import time

start_time = time.time()
# Create a 10000 requests
urls = ['http://www.google.co.il']*10000
rs = (grequests.head(u) for u in urls)

# Send them.
grequests.map(rs)

print time.time() - start_time # Result was: 9.66666889191
Run Code Online (Sandbox Code Playgroud)