gunya
@gunya

Python — два main loop

Всем привет. Изучаю python, пишу программу, jabber-клиент с gui.

Проблема в чем:
В обеих программах нужно в цикле обрабатывать информацию, для XMPP нужно что-то вроде

client = xmpp.protocol.Client(...)

while true:
....client.Process()


А во всех обертках для GUI (Tkinter, PySide, я особо не искал, в принципе), нужно также делать mainloop (Пример для PySide):

# Create a Qt application
app = QApplication(sys.argv)

# Something...

# Enter Qt application main loop
app.exec_()


Так вот — проблема в том, что мне нужно это сделать одновременно, пока на ум приходит только написание костылей. Есть ли какая-нибудь возможность реализовать такое приложение? Если да, то как? Если в какой-то библиотеке есть возможность это сделать базовыми средствами, было бы чудно. Скажите, в какую сторону копать.
  • Вопрос задан
  • 3814 просмотров
Решения вопроса 1
@yeputons
Событийно-ориентированность — это хорошо.

А вообще вас спасут потоки (threads)
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
coxx
@coxx
Кстати, скорее для общего развития, потоки — это не единственный подход к разработке сетевого клиента с GUI. К примеру, есть фреймворк Telepathy. В нем сетевой клиент — это, по сути, демон, который взаимодействует с фронтэндом через D-Bus.
Ответ написан
Комментировать
Lifelover
@Lifelover
Потоки — это зло.
Ответ написан
Комментировать
coxx
@coxx
Традиционный GUI-вый mainloop — это, по сути, обычный «while true:», в котором, среди прочего, происходит перерисовка интерфейса и обработка ввода от пользователя. Поэтому в однопоточной программе GUI будет зависать на любых блокирующих операциях (вычисления, ввод-вывод или просто time.sleep()).

Если Вы хотите освоить не только python, но и сам Qt, то стоит посмотреть на Qt-шные потоки.
Ответ написан
Комментировать
Mobyman
@Mobyman
Если интересно, могу скинуть свой вариант виселицы сетевой отказоустойчивой на питоне, она правда дилетантская, но может поможет:)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы