2011-09-09 9 views
1

ftplib pythonモジュールを使用して、FTP接続を介してファイルから行を取得しようとしています。 1GBのサイズのファイルを読み取るのに約10分かかります。より速く行を読む方法が他にあるのかどうか疑問に思っていました。私は私がやっているかを示すためにいくつかのコードが含まれている必要がありますpython ftp検索行 - パフォーマンスの問題

ftp.HostName = 'xxx' 
ftp.Userid = 'xxx' #so on 

ftp.conn.retrlines('RETR ' + fileName, process) 
+0

いいえ何があなたのPythonアプリだと思いますか?あなたは他のFTPクライアントを試して、彼らが取る時間を測定しましたか? –

答えて

0

あなたがやっていることのいくつかの最小限のコードサンプルを表示することができますか? FTPはファイルを転送するためのもので、 なので、リモートファイルから行を取得することは、ファイル全体を一度転送してローカルで読み取るほど効率的ではありません。

これ以外にも、の接続速度が速いことを確認しましたか?

EDIT:あなたは次のことを試してみて、それが少し速くはない場合、あなたはあなたのOSやあなたの接続によって制限されています

ftp.conn.retrbinary('RETR ' + fileName, open(temp_file_name, 'wb').write) 

ここでの仮定は、FTPのテキストモードはやや少ないかもしれないということであり、 (サーバー側で)効率的です。これは、間違っている可能性があります。

1

通常、リモートリソースを取得することは帯域幅によって制限され、FTPプロトコルではすべてのリソースを使い分けることができます。

ネットワーク接続が飽和していませんか? (何をからダウンロードしているftplibの、サーバーを実行しているクライアント間のネットワークリンクです?)

エンベロープCALCの裏:

1ギガバイト/ 10mins =〜1.7メガバイト/秒=〜13 Mbpsの

ので、あなたは13メガビットでダウンロードしています。これは遠隔のDSL /ケーブル/ WAN接続のためのまともな速度ですが、これがすべてローカルネットワークであればかなり低いでしょう。

+0

+1良い答えです。スタックオーバーフローの一般的な習慣であるため、適切な大文字を使用することをお勧めします。 –

+0

固定キャップ..あまりにもircに使用されています:) –

+0

'.retrlines( 'RETR' + fileName、callback)'は、次に行を取り出す最も速い方法ですか? – bbekdemir