簡體   English   中英

對於 http 請求,python 是否比 c++ 快?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM