1

私は 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 に) 変更することは、私がやりたい最後のことです。前もって感謝します!

4

1 に答える 1

1

VM関連の問題であることが判明しました。VM で Python コードを実行していましたが、同じ Windows エディションを実行している物理マシンに同じコードをコピーすると、問題は解消されます。

私は VM のメカニズムにまったく慣れていないので、VM にこのような問題が存在する理由を誰かが説明できれば幸いです。

于 2014-02-24T02:48:51.047 に答える