2

数百の画像を読み込み、サイズを変更してから、より大きな画像を作成するスクリプトがあります

毎回異なる画像セットで開始されます:

python myscript.py imageFolder/

Pypy を使用して virtualenv で実行しても、顕著な速度の向上は見られません (mprofile を使用するとすべて 8 秒以内に実行され、pypy バージョンは PIL.resize により多くの時間を費やし、パッケージの初期化に費やす時間は少なくなります)。

これは、JIT が長時間実行されるプロセスに対してのみ利点を提供するためですか?

もしそうなら、スクリプトをデーモンに変換できます (ただし、メモリ リークが心配です)。

4

2 に答える 2

10

あなたの説明から、それがPIL.resize()支配的な操作であるように見えます。その関数は Python ではなく C で書かれています。したがって、PyPy がスクリプトに大きな違いをもたらすと期待できるとは思えません。

速度を上げたい場合は、複数のコアで画像の読み込みとサイズ変更を並列化することを検討できます。通常、Python でスレッドを使用することはお勧めしません。通常はmultiprocessing代わりにモジュールを使用することをお勧めします。ただし、この特定のタスクでは、実際には複数のスレッドの方が適している場合があります。

于 2011-12-16T14:09:44.297 に答える
1

画像を処理する場合、スクリプトの処理時間の大部分が PIL の画像処理関数内で費やされる可能性があります。

それらはネイティブ コードで記述されており、既に完全なネイティブ スピードで最適化されています。Python コントローラ パーツ (どの画像を開くかを指定するコードなど) を移動してもあまり得られません。各画像本体に少なくとも 10000 バイト)。

さらに速度が必要な場合は、pypy を試すことを忘れてくださいmultiprocess。ただし、マルチコア マシンを使用している場合は、モジュールを介してコードの並列化を試すことができます。

于 2011-12-16T14:12:52.100 に答える