-3

私は複数の関数を実行しているので、各関数は100万行の.txtファイルからセクションを取ります。各関数には、100万行のセクションの各行を実行するforループがあります。Pythonで非常に大きなファイルを読むときの速度を向上させる

これは、他の2つのファイル(1つは50,000-100,000行、もう1つは500-1000行)の情報と一致しているかどうかを確認するための情報です。他の2つのファイルでループを実行して行が一致するかどうかを確認しました。情報が一致すると、出力を新しいファイルに書き出し、すべての関数が同じファイルに書き込みます。プログラムは約2,500行を生成しますが、実行時間が長くなると処理速度が低下します。また、関数を実行すると約500分で実行されますが、他の23個のプロセスでそれを実行すると2500分しかありませんが、それはなぜですか?

誰でもなぜそれが起こるか知っていますか?とにかく、プログラムの実行/読み込みを高速化するために何かをインポートすることができました。私は既にwith "as file1:"メソッドを使用しています。

複数のプロセスを高速に実行することはできますか?

+0

more thread!= faster。すべてのデータがメモリに収まる場合は、コア数に応じて – Whitefret

+0

が必要です.pandasモジュールを使用してデータを処理しようとすると、非常に高速で効率的です。最も遅い部分ディスクIOシステムを忘れないでください。スレッドの数ではなくボトルネックになります。 – MaxU

+0

1.いくつのコアがありますか? 2.このプロセスで使用されているCPUのうち、100%に近いものがあれば、より多くのコアが役に立たなくなります。 3.スレッドは「自分の」セクションの先頭にどのように到達しますか?最初に* n *行を読まなければならない場合、これは遅くならないことに驚いています。 –

答えて

0

スレッドはあなたのリソースのみを使用できます。 4コア=完全なリソースを備えた4スレッド。スレッド数を増やすとパフォーマンスが向上するケースがいくつかありますが、これは当てはまりません。だからスレッド数をあなたが持っているコアの数に保つ。

また、ファイルへの同時アクセス権があるため、このファイルをロックする必要があり、処理が少し遅くなります。

ただし、文字列を比較するコードは改善される可能性がありますが、それは別の質問です。

+1

4つのスレッド*処理*が必要です。彼らがIO待機中に立ち往生することができれば、コアをビジーに保つためにもっと必要があります。 –

+0

@MartinBonner本当ですが、私は彼の処理がファイルの書き込みよりもずっと長いと信じています – Whitefret

関連する問題