Как правильно закрыть основной цикл gobject в Python?

Я впервые сталкиваюсь с gobject, пытаясь слушать dbus. Я обнаружил, что этот фрагмент кода учит меня, как настроить основной цикл.

Как можно Я прослушиваю события «USB-устройство вставлено» в Linux, в Python?

Но сейчас мне нужен способ остановить это. В основном цикле есть функция выхода, и я знаю, как вызвать ее из исключения прерывания клавиатуры. Но как мне его остановить, когда я помещаю этот основной цикл в поток?

Или в более общем плане: как правильно заставить этот цикл работать независимо, но также завершать работу при выходе из основной функции?

Я ценю вашу помощь.


person JasonTS    schedule 24.09.2013    source источник


Ответы (1)


Ничего не знаю о python, но в целом вы должны передать переменную loop в вызывающий поток (ваша основная функция), а затем loop.quit() оттуда, когда вы закончите.

Чтобы передать переменную цикла, у вас есть два основных варианта:

  1. простой способ: инициализировать loop с помощью gobject.MainLoop() перед разветвлением, чтобы он был доступен из обоих потоков;
  2. сложный способ: передать значение в основной поток после его инициализации в потоке цикла.

Пример (на языке C) передачи данных между потоками показан в документации GCond. (push_data() и pop_data()).

person ntd    schedule 01.02.2014