Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python每秒发送1k POST http请求和数据?_Python_Http_Twisted_Python Asyncio_Grequests - Fatal编程技术网

如何使用Python每秒发送1k POST http请求和数据?

如何使用Python每秒发送1k POST http请求和数据?,python,http,twisted,python-asyncio,grequests,Python,Http,Twisted,Python Asyncio,Grequests,我需要为我的API做压力测试。 我修改为发送POST而不是HEAD,并且我在请求中添加了一些数据: count = int(sys.argv[1]) url = "http://api.example.com/" test_id = datetime.now().strftime("%H%M%S%f") data = [] for i in range(count): req_data = { 'test_id': test_id, 'param1': i

我需要为我的API做压力测试。 我修改为发送POST而不是HEAD,并且我在请求中添加了一些数据:

count = int(sys.argv[1])
url = "http://api.example.com/"
test_id = datetime.now().strftime("%H%M%S%f")
data = []
for i in range(count):
    req_data = {
        'test_id': test_id,
        'param1': i,
        'param2': 'aaa',
        'param3': 'bbb',
    }
    data.append(req_data)

start_time = time.time()
res = grequests.map(grequests.post(url, data=data[i]) for i in range(count))
sending_time = time.time() - start_time
print(sending_time)
之后,性能下降到每秒5个请求! 此外,我尝试了来自的所有答案,得到了相同的结果。达到1000请求/秒是真的吗?

是的,你可以这样做

您可以通过创建多个进程和线程来实现这一点

例如,使用子流程

在这里,我们将生成10个子流程,每个子流程将生成100个请求。因此,在一秒钟内,您将能够执行1000个请求

import subprocess

for i in range(10):
    subprocess.Popen(["python","pathToPythonScript/stressTesting.py","100"])
是的,你能做到

您可以通过创建多个进程和线程来实现这一点

例如,使用子流程

在这里,我们将生成10个子流程,每个子流程将生成100个请求。因此,在一秒钟内,您将能够执行1000个请求

import subprocess

for i in range(10):
    subprocess.Popen(["python","pathToPythonScript/stressTesting.py","100"])

当然,POST在web服务器中需要比HEAD多得多的处理。web服务器处理并发请求的能力如何?您可以将其配置为使用更多工人吗?是用工人吗?通过切换到POST,您的问题范围现在必须包括服务器和客户端中的处理。我正在使用Twisted on server sideShift将您的注意力转移到让服务器每秒处理1000个请求。客户端代码不是您的瓶颈。仅仅使用Twisted并不是一根魔杖。您需要将处理程序分解为多个延迟处理程序,以便更好地重叠并发请求的处理和I/O。听起来您可能发现了服务器中的瓶颈。回溯服务器代码,查看哪里发生了减速,并进行调整。寻找类似于
delfertoThread
或任何需要一段时间才能完成的延迟处理。当然,POST在web服务器中需要比HEAD多得多的处理。web服务器处理并发请求的能力如何?您可以将其配置为使用更多工人吗?是用工人吗?通过切换到POST,您的问题范围现在必须包括服务器和客户端中的处理。我正在使用Twisted on server sideShift将您的注意力转移到让服务器每秒处理1000个请求。客户端代码不是您的瓶颈。仅仅使用Twisted并不是一根魔杖。您需要将处理程序分解为多个延迟处理程序,以便更好地重叠并发请求的处理和I/O。听起来您可能发现了服务器中的瓶颈。回溯服务器代码,查看哪里发生了减速,并进行调整。寻找类似于
延迟线程
或任何需要一段时间才能完成的延迟。有人能解释一下这个答案的问题吗?在这里写下评论,这样我就可以增加我的知识。这并不是因为10个子流程每个都发出100个请求,它们将在一秒钟内完成。另外,最初的问题是关于grequests和asyncio,它们可能会比这快得多。我对asyncio了解不多,但有了它,您可以达到近100个。如果您没有内存或处理能力问题,您可以将计数器从10增加到15,您将收到1000个请求。我知道这是解决那个问题的办法,不是正确的解决办法。是的,谢谢你介绍我asyncio。有人能解释一下这个答案的问题吗?在这里写下评论,这样我就可以增加我的知识。这并不是因为10个子流程每个都发出100个请求,它们将在一秒钟内完成。另外,最初的问题是关于grequests和asyncio,它们可能会比这快得多。我对asyncio了解不多,但有了它,您可以达到近100个。如果您没有内存或处理能力问题,您可以将计数器从10增加到15,您将收到1000个请求。我知道这是解决那个问题的办法,不是正确的解决办法。但是是的,谢谢你介绍我asyncio。