スレッド - シンプルな 2 層ビュー (GUI、アプリケーション ロジック) を使用してみましょう。
アプリケーション ロジックの作業は、別の Python スレッドで行う必要があります。GUI レイヤーまで伝達する必要がある非同期イベントの場合、wx のイベント システムを使用してカスタム イベントをポストします。wx イベントの投稿はスレッド セーフであるため、複数のコンテキストから投稿できる可能性があります。
別の方向 (GUI 入力イベントがアプリケーション ロジックをトリガーする) で作業すると、カスタム イベント システムをホーム ロールするのが最善であることがわかりました。Queue モジュールを使用して、スレッドセーフな方法でイベント オブジェクトをプッシュおよびポップします。次に、同期メンバー関数ごとに、同期関数オブジェクトとパラメーターをイベント キューにプッシュする非同期バージョンとペアにします。
これは、一度に 1 つのアプリケーション ロジック レベル操作しか実行できない場合に特に効果的です。このモデルの利点は、同期が単純であることです。各同期関数は、独自のコンテキスト内で、プリエンプションやハンドコーディングによる降伏を心配することなく、最初から最後まで順番に動作します。重要なセクションを保護するためにロックは必要ありません。関数の最後に、操作が完了したことを示すイベントを GUI レイヤーに送信します。
これを拡張して複数のアプリケーションレベルのスレッドが存在できるようにすることもできますが、同期に関する通常の問題が再び発生します。
編集- これの美しさについて言及するのを忘れていました。それは、GUI コードからアプリケーション ロジックを完全に切り離すことができるということです。モジュール性は、別のフレームワークを使用するか、アプリのコマンドライン バージョンを提供することを決定した場合に役立ちます。これを行うには、GUI レイヤーによって実装される中間イベント ディスパッチャー (アプリケーション レベル -> GUI) が必要です。