-1

ネイティブ Java 開発者として、慣れ親しんだ状況に到達したと思います。

PyDev を使用し、Windows 7 64 ビットで Eclipse から実行するマルチスレッド Python 2.7 アプリケーションを開発しています。これは wxPython を使用するためマルチスレッド化されており、コールバックごとに 1 つのスレッドで GUI メイン スレッドと重い作業スレッド (および私または私にはいくつかの重い作業があります) を使用します。

appcrash メッセージとともにポップアップ0xc00000fdエラーが発生するところまで来ました。python27.dllこれは、スレッド内の関数が値を返すときに発生します。コールバックが処理するデータの量を減らすと、コードの一部が正常に機能するので、スタックに大量のデータがあり、再帰がどこにも問題を起こすことはないと確信しています。

スレッドを作成する前にスレッドを呼び出しstack_sizeて、使用可能なスペースを増やすことができます。これは、どのくらいのスペースがそれを満たすかを把握する場合、しばらくの間は機能する可能性があります。スレッドは、今後の作業を減らすのではなく、より多くの作業を行う必要があるため、これは応急処置のように思えます。

Python はヒープ メモリを使用してスタックを作成したので、これは Python では問題にならないのではないでしょうか? 本当の犯罪者である私の多くのサードパーティ API の 1 つですか? では、C にあるような低レベルのメモリ作成の意思決定能力がなければ、どうすればこれをスタックからヒープ メモリに移すことができるでしょうか?

4

1 に答える 1

7

Guido が言ったように、Python は決してクラッシュするべきではありません:

壊れにくいと言っているわけではありません。クラッシュした場合、頭脳明晰であることが証明されない限り、それはバグだと言っています。

したがって、クラッシュが発生した場合、Python 自体のバグと見なされます。これは非常にありそうもないことであり、拡張モジュールの 1 つが何か悪いことをしており、Python を使用している可能性が最も高いです。

私の提案は、問題が何であるかが正確にわかるまで、物事を取り除くことです. コアの python だけで発生する場合は、バグ レポートを提出する必要があります。それ以外の場合は、原因となっている拡張モジュールの開発者に報告する必要があります。

于 2012-12-19T15:03:48.173 に答える