LINUX.ORG.RU

приложение для работы с оборудованием. Нужно GUI

 ,


0

2

Как лучше организовать? В моем python3 приложении есть основной цикл, в котором выполняется работа с оборудованием. В нем в оборудование шлются команды и отдельным потоком получаются ответы. И есть GUI на gtk. И в gtk тоже есть свой основной цикл Gtk Main. Как лучше сопрячь одно с другим? Есть вариант сделать 2 потока и кидать события.

Как вообще такие приложения делают? GIL сейчас не критичен, но за пределы 0.5 секунд выходить не хотелось бы

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 5)

python3 приложении есть основной цикл, в котором выполняется работа с оборудованием

какой ещё цикл? ты про asyncio event loop?

Есть вариант сделать 2 потока и кидать события.

если абсолютно необходимо иметь 2 event loop'а, например asyncio и gtk, то без вариантов, 2 потока придётся делать.

eternal_sorrow ★★★★★
()

Как лучше организовать?

Приложение отдельно, гуй отдельно, общаться через сокеты, например.

vvn_black ★★★★★
()
Ответ на: комментарий от cvs-255

звучит как эталонный говнокод, впрочем это не моё дело. ответ прежний, 2 потока лучший вариант решения этой задачи

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

звучит как эталонный говнокод

С чего вдруг? Это следует из логики задачи

cvs-255 ★★★★★
() автор топика

Есть вариант сделать 2 потока и кидать события.

У тебя и так уже есть два потока. Общие объекты и кидать события это то как это обычно и делается. Так же обычно такие приложения кишат багами состояния гонки и дедлоками. Если кидаться сообщениями то такие баги практически невозможны.

redixin ★★★★
()

я независимые циклы объединяю очередями.

oblfan
()
Ответ на: комментарий от tz4678

холокост

Пожалей евреев, одна программка того не стоит

ArkaDOSik ★★
()

Насколько я понял ваш цикл выглядит как:

while True:
    event = wait_event()
    process_event(event)

Надо его заменить на:

while True:
    while gtk.events_pending():
        gtk.main_iteration()
    event = wait_event(tiny_timeout)
    process_event(event)

Но лучше создать GSource для своих событий и встроиться в GMainLoop.

rymis ★★
()

И в gtk тоже есть свой основной цикл Gtk Main.

есть. И есть аналог «one event» и gtk спокойно встраивается в софт с собственным «основным циклом» без рожания лишних потоков

MKuznetsov ★★★★★
()
Ответ на: комментарий от vvn_black

я скорее не про допустимую задержку, а про обьем данных, которые обновляются

genryRar ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.