对于 http 请求,python 比 c++ 快吗?
Is python faster than c++ for http requests?
我有用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 具有非常优化的页面请求方式,而您使用的swish
lib/代码则没有。
网络时间可能是相同的(事实上,它应该是相同的(,但你真的无法知道(除非你开发swish
lib(那个库在做什么。 请求c++
网页可以通过多种方式完成,除非您为两者编写代码,否则无法比较任何一个。 我会说你的方法(调用swish
(不是最佳的(但在所有情况下都很有用(,Python 是为最佳的"请求和等待响应"而设计的。 因此,在这种情况下,Python的优势在于有成千上万的用户报告反馈,允许开发人员对其进行优化。 Swish可能没有那么多用户,可能没有那么多反馈,也没有像Python那样优化(毕竟Python调用c
(。
如果有人有疑问,有一些方法可以加快诸如TCP_NODELAY之类的事情,从而有所作为。或者只是select
调用中的超时。
当谈到网络时,语言不是瓶颈,而是网络。因此,如果您对 lib 性能不满意,您应该更改库而不是语言。
- 对于 http 请求,python 比 c++ 快吗?
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 假设 a 是双倍的,2.0*a 比 2*a 快吗?
- “std::p ow(double, int)”比“std::p ow(double, double)”快吗?如果是,快
- 类方法变量,如果将它们存储在类本身中会更快吗?
- 在 GPU 上计算积分图像真的比在 CPU 上更快吗?
- C 中的unordered_map/set的哈希功能更快吗?
- C++映射:创建一个临时变量或每次使用键访问值会更快吗
- 是x+=a比x=x+a快吗
- Qt:QML比c++小部件快吗
- 模块会使模板编译更快吗
- CUDA内核2x2 ZgemmBatched:比CuBLAS快5倍.它能跑得更快吗
- 在实践中,无序映射真的比映射快吗
- isdigit() 在 c++ 中不应该更快吗?
- "!="比较运算符比">"快吗?
- 循环真的比递归快吗?
- 使用二进制堆从数组中获取前x个整数会更快吗?还是使用快速排序
- 如果程序中没有结构,c++代码运行得更快吗?< / h1 >
- 如果没有if,std::count_if会更快吗
- 乘法比浮点除法快吗