0

ここに私の問題があります--

wx python を使用して python GUI アプリケーションを作成しています。プロセス ボタンがクリックされると、ファイルの作成/エンコードが舞台裏で行われます。当初、これは動作中にGUIのすべてをフリーズさせたので、別のスレッドでファイルの作成/エンコードを行うことにしました--スレッドを作成したメソッドが終了するとすぐに、ここに摩擦があります--(比較的迅速に)実際にスレッドを作成するコードは次のとおりです。

for audiobook in AudioBookObjects:
        thread.start_new(self.createSingleBook, tuple([audiobook]))

ここに奇妙な部分があります-私がこのコードを使用した1つのマシンで、GUIをフリーズせずに1つのスレッドを終了させ、戻ってきました。別のマシンでは、2 つのスレッドが非常に速く起動し、終了時にクラッシュします。オペレーティング システム間でスレッドの動作に何か変更はありますか? 同じバージョンのpythonを使用しています。私はそれを絶対に確信しています。

基本的に、私は 2 つのことを知る必要があります: Python スレッドを作成したメソッドが終了した後、Python スレッドはどうなりますか? スレッドが正常に終了するためにトリガー メソッドが固執する必要がある場合、フリーズしない GUI を構築するにはどうすればよいでしょうか!?

前もって感謝します!さらに情報が必要な場合はお知らせください

4

1 に答える 1

0

私の記憶が正しければ、Windows は「実際の」スレッドを実行します。Linux のスレッドはプロセスです。違いは、通常のスレッドは同じメモリを共有し、プロセスは共有しないことです。

あなたのプログラムは win でクラッシュし、linux で動くと思います。私が間違っていなければ、あなたの createSingleBook-threads が同じオブジェクトにアクセスしている可能性がありますが、これにはロック保護がないようです。

実際のフォークでは、特に明記されていない限り、すべてが複製されます。したがって、ロックや競合状態に対する保護が強化されます。

私の予備的な推測にすぎませんが、より洞察力のある人なら誰でも自由に修正してください。それ以外の場合は、操作しようとしているオブジェクトにロックを実装することをお勧めします。

于 2012-07-10T00:03:41.043 に答える