私は python と httplib を使用して、ファイル共有サーバー用の非常に単純なファイル アップローダーを実装しています。ファイルが 1 MB を超える場合、ファイルはチャンク化され、一度に 1 チャンクずつアップロードされます。クライアントとサーバー間のネットワーク接続は良好です (100 mbps、3 ミリ秒未満の遅延)。
チャンク サイズが小さい場合 (128kB 以下)、すべて正常に動作します (>200kB/s)。しかし、チャンク サイズを 256kB 以上に増やすと、128kB のチャンク (<20kB/s) と比較して、チャンクを完了するのに約 10 倍の時間がかかります。さらに奇妙なことに、これは私のwin32マシン(win8 x86、32b pythonを実行)でのみ発生し、amd64マシン(win8 amd64、64b pythonを実行)では発生しません。
いくつかのプロファイリングの後、検索を httplib.HttpConnection の request() および getresponse() 関数に絞り込みました。これらがブロックの原因であるためです。
私の最初の推測は、ソケットのバッファリングに関するものです。しかし、SO_SNDBUF および TCP_NODELAY オプションを変更してもあまり役に立ちません。サーバー側もチェックしましたが、すべて正常です。
誰かがここで私を助けてくれることを本当に願っています。http ライブラリを (pycurl に) 変更することは、私がやりたい最後のことです。前もって感謝します!