5.4. Anaconda 스레드 간 통신
설치 프로세스 중에 수행해야 하는 일부 작업은 시간이 오래 걸릴 수 있습니다. 예를 들어 기존 파티션의 디스크를 스캔하거나 패키지 메타데이터를 다운로드합니다. 대기 및 나머지 응답 시간을 방지하기 위해 Anaconda 는 이러한 작업을 별도의 스레드에서 실행합니다.
Gtk 툴킷은 여러 스레드의 요소 변경을 지원하지 않습니다. Gtk 의 주요 이벤트 루프는 Anaconda 프로세스의 기본 스레드에서 실행됩니다. 따라서 GUI와 관련된 모든 작업은 기본 스레드에서 수행해야 합니다. 이렇게 하려면 GLib.idle_add
를 사용하십시오. 이는 항상 쉽고 원하는 것은 아닙니다. pyanaconda.ui.gui.utils 모듈에 정의된 여러 도우미 함수 및 데코레이터가 챌린지에 추가할 수 있습니다.
이 함수 또는 메서드를 호출할 때 해당 함수 또는 메서드를 호출할 때 기본 스레드에서 실행되는 Gtk의 기본 루프에 자동으로 큐에 큐에 저장되면 기본 스레드에서 실행되는 Gtk _action_
데코레이터가 장식된 함수 또는 메서드를 변경합니다. 반환 값은 호출자로 반환되거나 각각 삭제됩니다.
wait
및 @managek_action_nowait
대화 상자 및 허브 통신에서 대화 상대는 준비가 되어 있고 차단되지 않을 때 발표되었습니다. hubQ
메시지 큐는 이 기능을 처리하고 주기적으로 기본 이벤트 루프를 확인합니다. 대화 상자에 액세스 할 수 있게 되면 변경 사항을 발표하는 대기열에 메시지를 보내고 더 이상 차단해서는 안 됩니다.
spoke에서 상태를 새로 고치거나 플래그를 완료해야 하는 경우에도 동일하게 적용됩니다. 구성 및 진행률 허브에
는 설치 진행 상황 업데이트를 전송하기 위한 매체 역할을 하는 progressQ
라는 다른 큐가 있습니다.
이러한 메커니즘은 텍스트 기반 인터페이스에도 사용됩니다. 텍스트 모드에서는 기본 루프가 없지만 키보드 입력은 대부분의 시간을 사용합니다.