PyGTK неблокирующий - PullRequest
       7

PyGTK неблокирующий

0 голосов
/ 15 сентября 2011

Есть ли способ не блокировать PyGTK при выполнении какой-либо дорогостоящей операции?Я знаю, что многопоточность будет работать, но это займет много кода и настройки.

Спасибо,

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Настройка фонового потока в PyGTK не так уж и сложна .

1 голос
/ 22 сентября 2011

Threading не очень хороший выбор в pygtk.Просто проверьте основной цикл на наличие событий в вашем дорогостоящем цикле, и позвольте ему делать свое дело:

while my_operation_running:

    <my code>

    while gtk.events_pending():
        gtk.main_iteration()

или настройте свою дорогую операцию, чтобы ее можно было выполнять пошагово, используя

glib.idle_add(function)

Каждый раз, когда главному циклу нечем заняться, он будет вызывать «функцию», просто убедитесь, что функция отслеживает ее продвижение и выполняет только одну итерацию в каждом вызове.

0 голосов
/ 27 сентября 2011

Избегайте потоков, они плохо работают с PyGTK.Некоторые альтернативы:

  • Для операций ввода-вывода / сетевых операций, когда вы читаете из файлового дескриптора, используйте glib.io_add_watch ()
  • Переместите операции в отдельный процесс и обменивайтесь данными с ним с помощью glib.spawn_async ()

Twisted - отличная библиотека для работы в сети, полностью неблокируемая и хорошо интегрируемая с основной петлей PyGTK, рассмотрите возможность ее использования.

...