Всем привет. Изучаю 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_()
Так вот — проблема в том, что мне нужно это сделать одновременно, пока на ум приходит только написание костылей. Есть ли какая-нибудь возможность реализовать такое приложение? Если да, то как? Если в какой-то библиотеке есть возможность это сделать базовыми средствами, было бы чудно. Скажите, в какую сторону копать.
Кстати, скорее для общего развития, потоки — это не единственный подход к разработке сетевого клиента с GUI. К примеру, есть фреймворк Telepathy. В нем сетевой клиент — это, по сути, демон, который взаимодействует с фронтэндом через D-Bus.
Традиционный GUI-вый mainloop — это, по сути, обычный «while true:», в котором, среди прочего, происходит перерисовка интерфейса и обработка ввода от пользователя. Поэтому в однопоточной программе GUI будет зависать на любых блокирующих операциях (вычисления, ввод-вывод или просто time.sleep()).
Если Вы хотите освоить не только python, но и сам Qt, то стоит посмотреть на Qt-шные потоки.