[英]Is python faster than c++ for http requests?
我有用 python3.6 編寫的程序,現在我想在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
庫(它只是 curl 包裝器。這是庫repo )發出請求並使用命令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/code 沒有。
網絡時間可能是一樣的(其實應該是一樣的),但是你真的不知道(除非你開發了swish
lib)那個庫在做什么。 在c++
中請求 web 頁面可以通過多種方式完成,除非您為兩者編寫代碼,否則無法比較任何一種方式。 我會說您的方法(調用swish
)不是最佳的(但在所有情況下都很有用),並且 Python 旨在實現最佳的“請求和等待響應”。 因此,在這種情況下,Python 的優勢在於有成千上萬的用戶報告反饋,從而允許開發人員對其進行優化。 Swish 可能沒有那么多用戶,可能沒有那么多反饋,而且它沒有像 Python(畢竟調用c
)那么優化。
如果有人有疑問,有一些方法可以加快TCP_NODELAY 之類的速度,這會有所作為。 或者只是select
調用中的超時。
當談到網絡時,語言不是瓶頸,而是網絡。 因此,如果您對 lib 性能不滿意,您應該更改庫而不是語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.