ハングする PyQt アプリケーションがあります。
Qt 4.7.4 (64 ビット) Python 2.6.1 GCC 4.2.1 OSX 10.6.8
ハングの位置はさまざまです。ハングの 1 つの場所を無効化または書き換えると、その直後に別の場所でハングが発生します。
アプリケーションは、数千のカスタム データ オブジェクトを返す可能性のある検索を実行します。各データ オブジェクトには、50 の子オブジェクトが含まれる可能性があります。
ログを記録すると、これらのカスタム オブジェクトを作成するループでハングが発生する傾向があることがわかります。
また
アプリケーションはスレッドを使用していますが、これらのスレッドを無効にしてもハングが発生します。(これを確認するためにLaszlo Nagy のスタック トレース ツールを使用しています。メイン スレッドとスタック トレーサ スレッドのみが実行されている場合でもハングが発生します。)
アプリケーションは、イメージ ファイルを読み取り、作成します。I/O ロックが原因である可能性は低いようですが、まだ除外していません。
私は疑問に思う
作成できる Python オブジェクトの数に制限はありますか?
私が到達している可能性のある他の制限はありますか?
ガベージ コレクションのための明示的なオブジェクトの削除は行っていません。するべきか?
他に通常の容疑者はいますか?
編集 (8/13):
QTimer.singleShot は知っておくと良いことであり、有力候補ですが、このアプリは singleShot を使用していません。
アプリケーションがハングすると、100% の CPU (および約 140 MB のメモリ) を要求します。
できるだけ早く strace を試して、何が明らかになるか見てみます。