2

いくつかのファイルを更新するために 24 時間年中無休で実行することを目的としたスクリプトを作成しました。ただし、1 つのファイルを更新するのに 3 分かかる場合、100 個のファイルを更新するには 300 分かかります。

スクリプトの n インスタンスを実行して、n 個の個別のファイルを管理し、ターンアラウンド タイムを短縮することは可能ですか?

4

2 に答える 2

2

はい、可能です。multiprocessingモジュールを使用して、複数の同時プロセスを開始します。これには、マニュアル ページで説明されているように、Global Interpreter Lock とスレッドが原因で問題が発生しないという利点があります。マニュアルページには、スクリプトを並行して実行するために必要なすべての例が含まれています。もちろん、これは、プロセスが対話する必要がない場合に最適に機能します。これは、あなたの例が示唆しています。

于 2012-12-21T15:25:00.513 に答える
2

まず、1 つのスレッドで 3 分を短縮する方法がないかどうかを調べることをお勧めします。高速化の機会を発見するために私が使用する方法は、ここで示されています

また、純粋に I/O バウンドかどうかもわかります。完全に I/O バウンドで、すべてのファイルが 1 つのディスク上にある場合、並列処理は役に立ちません。その場合、ファイルをソリッド ステート ドライブに保存すると役立つ可能性があります。

一方、CPU バウンドの場合は、@hochl が言ったように、並列処理が役立ちます。とにかく、スピードアップの機会を見つけて修正してください。それらの 1 つまたは複数を持たない適切なサイズのプログラムは見たことがありません。これにより 1 つの高速化要因が得られ、並列処理によって別の要因が得られ、合計の高速化はこれら 2 つの要因の積になります。

于 2012-12-21T15:52:51.300 に答える