質問

私は標準ライブラリのhttlibを通じて大量のデータをプッシュするのpythonクライアントを持っています。ユーザーは、アプリケーションが遅いというcomplaingingされています。私はこれは私が使っているHTTPクライアントに一部起因する可能性があることを疑うます。

私は何か他のものでhttplibを交換することにより、パフォーマンスを向上させてもらえますか?

私はツイストがHTTPクライアントを提供することを見てきました。彼らの他のプロトコル製品に比べて非常に基本的なことのようです。

PyCurlは有効な代替であるかもしれない、しかしそれは使用だ、それはパフォーマンスだ場合は、他の一方で、非常に非神託のようですし、私が非ニシキヘビコードのビットを我慢することができ、本当に良いです。

あなたのpythonのより良いHTTPクライアントライブラリの経験を持っているのであれば、

は、それについて教えてください。私はあなたが、実装の品質を考えたものhttplibするパフォーマンスの相対的な考えと知っているしたいと思います。

UPDATE 0:httplibの私の使用は実際には非常に限られている - 交換は次の操作を実行する必要があります:

conn = httplib.HTTPConnection(host, port)
conn.request("POST", url, params, headers)
compressedstream = StringIO.StringIO(conn.getresponse().read())

それはすべてです:いいえプロキシ、リダイレクトまたは任意の凝りました。これは、プレーン古いHTTPです。私は、できるだけ速くそれを行うことができるようにする必要があります。

UPDATE 1: - 私はhttplibに代替案のいくつかについて知りたい

役に立ちましたか?

解決

多くの場合、私はhttplibとパフォーマンスの問題を持っていたとき、問題はhttplib自体であったが、どのように私はそれを使用しているとされていません。ここではいくつかの一般的な落とし穴があります:

(1)すべてのWeb要求のための新しいTCP接続をしないでください。あなたの代わりにこのパターンで、同じサーバーにリクエストをたくさん作っている場合:

    conn = httplib.HTTPConnection("www.somewhere.com")
    conn.request("GET", '/foo')
    conn = httplib.HTTPConnection("www.somewhere.com")
    conn.request("GET", '/bar')
    conn = httplib.HTTPConnection("www.somewhere.com")
    conn.request("GET", '/baz')

の代わりにこれを行います:

    conn = httplib.HTTPConnection("www.somewhere.com")
    conn.request("GET", '/foo')
    conn.request("GET", '/bar')
    conn.request("GET", '/baz')

(2)あなたの要求をシリアライズしないでください。あなたが好きなスレッドやasynccoreかを使用することができますが、異なるサーバーから複数の要求を行っている場合は、あなたがそれらを並行して実行することでパフォーマンスを向上させることができます。

他のヒント

  

ユーザーがアプリケーションが遅いというcomplaingingされています。私はこれは私が使っているHTTPクライアントに一部起因する可能性があることを疑うます。

     

私は何か他のものとhttplibを置き換えることにより、パフォーマンスを改善できますか?

は、をくださいのそれかあなたがをしている疑いのあることを確認のそれはhttplibだとそれ?アプリのパフォーマンスを改善するために何かをする前にプロフィールます。

私は時間が費やされている場所に自分の直感は、多くの場合、かなり悪いですがわかりました(存在しないことを与えられたいくつかのコードのカーネルは数百万回を実行しました)。これは、アプリをプルアップし、それが何の違いを作っていないことがわかり、パフォーマンスを改善するために何かを実装するためには本当にがっかりだ。

あなたは暗闇の中で撮影している、プロファイリングしていない場合は!

PyCurlは素晴らしい、と非常に高いパフォーマンスです。

httplib2は別のオプションです。 http://code.google.com/p/httplib2/する

私はベンチマークないかhttplibと比較して、それをプロファイリングが、私もそこに任意の調査結果に興味があるんです。

<時間>

12月2012アップデート: 私はもはやhttplib2を使用していません。 HTTP人間にとって、Pythonの持つ任意のHTTPの<:今の を要求し使用。 / P>

あなたはそのライブラリーを想定しているようです。そのオープンソース、それがあるかどうかを確認するために、コードをチェックする価値があるだろうので。

あなたはHTTPを介して大量のデータを送っていることに言及します。 inefficienyがあるため、ライブラリのかもしれませんが、HTTPは、大量のデータを送信するための最も効率的なプロトコルではありません。その後、再び、それは(あなたは大きな文字列またはリストを送信する、またはストリームや発電機を使用していますか?)ライブラリの簡単な使用可能性があります。

それは、正しくヘッダを処理し、応答をキャッシュすることができますので、

他の人が答えたようhttplib2は良い選択肢ですが、私は、これはPOSTのパフォーマンスに役立つことはないだろう。

実際に特にWindows上で、あなたにPOSTのパフォーマンスの向上を与えるかもしれない代替は、新しいHTTP Twisted.webする

1.1クライアント

httplib2は非常に良いオプションです。ジョー・グレゴリオはhttplibの多くのバグを修正しました。

これは、私のWindowsマシン上で動作します: (IPv6のサポートなし)のPy 2.3ではこれは、IPv4アドレスのみです しかし、Pyを2.4から2.6に順序が(私の勝利XPホスト上)IPv6アドレスであります まず、その後、IPv4アドレス。 IPv6アドレスが最初にチェックされているので、 これは、タイムアウトを与え、ゆっくりと、Connect()の呼び出しが発生します。

私は127.0.0.1に「localhost」を変更していると、それは(1087msから87msまで)10倍速く仕事を始めました。 のhttpからソリューション://www.velocityreviews.com/forums/t668272-problem-with-slow-httplib-connections-on-windows-and-maybe-otherplatforms.htmlする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top