RequestsライブラリはPyCurlのパフォーマンスと比較してどうですか?
私の理解では、Requestsはpython urllibのラッパーである一方、PyCurlはpython libcurlのネイティブラッパーであるため、PyCurlはより良いパフォーマンスを得るが、確かにいくらですか。
比較するベンチマークを見つけることができません。
私はあなたに完全なベンチマークを書きました、些細なFlask gUnicorn/meinheld + nginx(パフォーマンスおよびHTTPS用)、10,000リクエストを完了するのにかかる時間の確認テストは、アンロードされたc4.largeインスタンスのペアでAWSで実行され、サーバーインスタンスはCPU制限されませんでした。
TL; DR summary:多くのネットワークを使用している場合は、PyCurlを使用し、そうでない場合はリクエストを使用します。 PyCurlは、小さなリクエストを大きなリクエストで帯域幅の制限(ここでは約520 MBitまたは65 MB/s)に達するまでリクエストの2倍から3倍の速度で終了し、3倍から10倍少ないCPU電力を使用します。これらの図は、接続プールの動作が同じ場合を比較しています。デフォルトでは、PyCurlは接続プールとDNSキャッシュを使用しますが、リクエストは使用しません。そのため、素朴な実装は10倍遅くなります。
桁数が関係するため、二重対数プロットは下のグラフにのみ使用されることに注意してください
完全な結果はリンクにあります 、およびベンチマーク手法とシステム構成。
警告:結果を科学的な方法で収集するために苦労しましたが、1つのシステムタイプと1つのオペレーティングシステムのみをテストしています。パフォーマンスの限られたサブセット、特にHTTPSオプション。
何よりもまず、requests
は urllib3
library 、stdlib urllib
またはurllib2
ライブラリはまったく使用されません。
パフォーマンスに関してrequests
とpycurl
を比較する意味はほとんどありません。 pycurl
はその作業にCコードを使用する場合がありますが、すべてのネットワークプログラミングと同様に、実行速度はマシンをターゲットサーバーから分離するネットワークに大きく依存します。さらに、ターゲットサーバーの応答が遅くなる可能性があります。
最終的に、requests
にははるかに使いやすいAPIがあり、その使いやすいAPIを使用すると生産性が向上することがわかります。
サイズに焦点を当てる-
8GBのRAMと512GB SSD、1秒間に3キロバイト(インターネットとwifiから)で着信する100MBファイル)、pycurl、curl、requestsライブラリのgetのMac Book Airでは関数(チャンクまたはストリーミングに関係なく)はほとんど同じです。
小さい クアッドコアIntel Linuxボックス 4GB RAM、ローカルホスト経由(同じボックスのApacheから)、1GBファイルの場合、curlとpycurlは 'requests'ライブラリよりも2.5倍高速です。また、チャンクとストリーミングを同時にリクエストすると、10%のブーストが得られます(50,000を超えるチャンクサイズ)。
Pycurlのリクエストを交換する必要があると思っていましたが、作成しているアプリケーションがクライアントとサーバーを閉じることはないのでそうではありません。