对于 http 请求,python 比 c++ 快吗?

Is python faster than c++ for http requests?

本文关键字:c++ 快吗 python http 请求 对于      更新时间:2023-10-16

我有用python3.6编写的程序,现在我想用c++重写它以使其更快。在这样做之前,我决定做一个小测试,以推断我将获得多少速度。该程序发出了很多http请求,所以我决定测试http请求速度。但我对结果感到非常惊讶,因为 python 在每个请求中的 c++ 速度平均为~50ms(有时是~100ms,有时是~10ms(,我不明白为什么。

这是我的 C++ 代码:

#include "swish/swish.h"
#include <chrono>

int main() {
swish::Client httpclient = swish::Client();
std::chrono::milliseconds since = std::chrono::duration_cast< std::chrono::milliseconds >(std::chrono::system_clock::now().time_since_epoch());
std::pair<swish::Response<swish::ResponseHeaderBuffer>, swish::StatusCode> resp = httpclient.Get("https://api.btcturk.com/api/v2/ticker");
std::chrono::milliseconds now = std::chrono::duration_cast< std::chrono::milliseconds >(std::chrono::system_clock::now().time_since_epoch());
std::cout << now.count() - since.count() << std::endl;
return 0;
}

我正在使用这个swish http client库(它只是卷曲包装器。这是库存储库(发出请求并使用命令clang++ testcpp.cpp -std=c++17 -o test -lcurl -O3编译它。

这是我的Python代码:

import time
import requests
current_milli_time = lambda: int(round(time.time() * 1000))

if __name__ == "__main__":
since = current_milli_time()
res = requests.get('https://api.btcturk.com/api/v2/ticker')
now = current_milli_time()
print(now - since)

是因为大多数毫秒因为等待响应而完全与网络相关吗? 但是Python每次都更快。我以不同的间隔尝试了20~30次。还是因为这个库的python代码真的优化了??

区别可能是因为 Python 具有非常优化的页面请求方式,而您使用的swishlib/代码则没有。

网络时间可能是相同的(事实上,它应该是相同的(,但你真的无法知道(除非你开发swishlib(那个库在做什么。 请求c++网页可以通过多种方式完成,除非您为两者编写代码,否则无法比较任何一个。 我会说你的方法(调用swish(不是最佳的(但在所有情况下都很有用(,Python 是为最佳的"请求和等待响应"而设计的。 因此,在这种情况下,Python的优势在于有成千上万的用户报告反馈,允许开发人员对其进行优化。 Swish可能没有那么多用户,可能没有那么多反馈,也没有像Python那样优化(毕竟Python调用c(。

如果有人有疑问,有一些方法可以加快诸如TCP_NODELAY之类的事情,从而有所作为。或者只是select调用中的超时。

当谈到网络时,语言不是瓶颈,而是网络。因此,如果您对 lib 性能不满意,您应该更改而不是语言。