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


问题内容

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

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

以下代码显示了带有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

任何人都可以帮助我弄清楚为什么加速如此之低?还有其他任何机制可以使其更快吗?


问题答案:

我知道这是一则旧文章,但有人可能仍需要它。

如果要进行负载测试但要使用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