5.4. Anaconda スレッド間の通信


インストールプロセス中に実行する必要のあるアクションの一部には時間がかかる場合があります。たとえば、既存のパーティションのディスクをスキャンしたり、パッケージメタデータをダウンロードしたりできます。待機して応答しなくなるため、Anaconda はこれらのアクションを別のスレッドで実行します。

Gtk ツールキットは、複数のスレッドからの要素の変更をサポートしません。Gtk の主なイベントループは、Anaconda プロセスのメインスレッドで実行されます。したがって、GUI に関連するすべてのアクションはメインスレッドで実行する必要があります。これを行うには、GLib.idle_add を使用しますが、これは常に簡単でも望ましい訳ではありません。pyanaconda.ui.gui.utils モジュールに定義されているいくつかのヘルパー関数およびデコレーターが難易度に追加される場合があります。

@gtk_action_wait および @gtk_action_nowait デコレーターにより、デコードされた関数またはメソッドが呼び出されたときに、メインスレッドで実行される Gtk のメインループに自動的にキューに置かれるように、デコレートされた関数またはメソッドが変更されます。戻り値はそれぞれ呼び出し元またはドロップされた値に返されます。

スポークやハブの通信では、準備ができ、ブロックされていないときにスポークが通知します。hubQ メッセージキューはこの機能を処理し、メインのイベントループを定期的に確認します。スポークがアクセス可能になると、メッセージをキューに送付し、メッセージをブロックしないようにします。

スポークがステータスを更新するか、フラグを完了する必要がある場合にも、同じことが当てはまります。Configuration and Progress ハブには、progressQ と呼ばれる異なるキューがあり、インストール進捗の更新を転送するためのメディアとして機能します。

これらのメカニズムは、テキストベースのインターフェイスにも使用されます。テキストモードではメインループはありませんが、キーボード入力にかかる時間がほとんどありません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.