1

私はGoogle App Engineで開発しています。開発サーバーでのデバッグに WingIDE (Python IDE) を使用しています。私のデータストアには数千のエンティティがあり、開発サーバーの起動時に DatastoreFileStub.Read() を通過し、各エンティティで何かを行う必要があることがわかります。

問題は、WingIDE を介して開発サーバーを実行すると、実行速度が非常に遅くなることです。ピークを取るために、いくつかのプロファイリング ロギング コードを Google アプリ エンジンに入れました。

コマンドラインで開発サーバーを実行すると、次のメッセージが表示されます。

Finished reading 10374 Entites in 10.17 seconds, 1019 per second

ただし、WingIDE を使用して開発サーバーを実行すると、次のようになります。

Finished reading 10374 Entites in 52.44 seconds, 197 per second

WingIDE が 5 倍遅くなる理由を知っている人はいますか?

4

2 に答える 2

2

おそらく、デバッガーが接続されているためです。デバッガーはすべてをインストルメント化することでコードを大幅に遅くし、データストアの逆シリアル化は大変な作業です。

--use_sqlite フラグを使用すると、実験的な sqlite ベースのローカル データストアが有効になり、起動時間が短縮されます。ただし、切り替えたときにデータストアを消去する必要があることに注意してください。

于 2010-10-18T09:37:10.637 に答える
0

1 つのアイデアは、起動後に wingdbstub を使用してデバッグを開始することです。どこかのコードに 'import wingdbstub' を追加する必要がありますが、それは起動後にどこでも呼び出される可能性があります。もちろん、モジュールは Python パス上にある必要があり、接続をリッスンするように IDE を構成する必要があり、いくつかの基本的なセキュリティを設定する必要があります。これについては、すべてhttp://wingware.com/docで詳細に説明されています。 /debug/importing-the-debugger

API もあるため、デバッグを早めに開始し、デバッガーのオーバーヘッドが大きすぎる場所で一時的にオフにすることができます。http://wingware.com/doc/debug/debugger-apiを参照してください

デバッガーのオーバーヘッドは、実行される Python バイト コードの数に比例するため、(少なくとも CPython の場合) 注意が必要です。インタープリターでバイト コードを実行するのにどれくらいの時間が費やされ、C/C++ ライブラリまたは Python の内部でどのくらいの時間が費やされるかは、Python コードを見ただけでは必ずしも明らかではありません。大量のデータを反復処理するネストされた Python ループのようなものは、実行する作業がほとんど Python で行われている場合、デバッガーでの実行が非常に遅くなります。多くの場合、ほとんどの作業は実際には Python の内部またはライブラリ コードで行われるため、デバッガーによって処理がそれほど遅くなることはありません。

于 2014-02-11T19:10:13.530 に答える