0

私はubuntuを使用しています。実行すると多くのデータベース操作を行う管理コマンドがいくつかあるため、15 分近くかかります。

私のシステム モニターは、システムに 4 つの CPU と 6GB の RAM があることを示しています。ただし、このプロセスはすべての CPU を使用しているわけではありません。CPUの1つだけを使用していて、RAMが少なすぎると思います。すべての CPU とほとんどの RAM を使用することができれば、プロセスは非常に短い時間で完了すると思います。

優先順位を -18 (非常に高いことを意味します) に設定して renice を試しましたが、それでも速度は遅くなります。

詳細:

これは、ループ数がほぼ 10,000 の python スクリプトであり、そのようなループが 10 近くあります。すべてのループで、postgres データベースに保存します。

4

2 に答える 2

0

Just in case, did you run the command renice -20 -p {pid} instead of renice --20 -p {pid}? In the first case it will be given the lowest priority.

于 2013-12-02T08:41:31.920 に答える
0

このアプリケーションを複数の CPU で実行する場合は、セットアップに応じていくつかの方法を試すことができます。

頭に浮かぶ最も明白なことは、アプリケーションでスレッドとマルチプロセスを利用することです。これにより、アプリケーションは一度に「より多くのことを行う」ことができます。明らかに、ここで発生する可能性のある問題は同時データベース アクセスであるため、トランザクションを使用する必要がある場合があります (その時点で、そもそもマルチプロセスを使用する利点が失われる可能性があります)。

次に、多数のデータベース接続を開いたり閉じたりしていないことを確認し、アプリケーションが必要なだけ接続を開いたままにできることを確認します。

3 番目に、データベースのインデックスが正しく作成されていることを確認します。大きな文字列を検索している場合、処理が遅くなります。

第 4 に、Python にほとんど操作を残さずに SQL でできることはすべて行います。SQL は、許可すればデータ操作を恐ろしく迅速に実行できます。データベースからデータを取り出してコードに取り込み始めるとすぐに、処理速度が大幅に低下します。

第 5 に、データベース内で内部的にキャッシュおよび最適化できるストアド プロシージャを利用します。これらは、簡単に最適化できないアプリケーションで構築されたクエリよりもはるかに高速です。

第六に、プログラムの反復ごとに保存しないでください。多数のレコードを変更し、それらすべてを 1 つのバッチ ジョブに保存するバッチ スタイルのジョブを作成してみてください。これにより、各反復での IO の量が削減され、プロセスが大幅に高速化されます。

Django は一括更新メソッドの使用をサポートしています。一度に複数の Django オブジェクトを保存することについて、stackoverflow に関する質問もありました。

于 2013-03-28T09:47:48.317 に答える