Я пытался искать, но ничего не работает. Например:
В настоящее время я пишу простое коммуникационное приложение на Python2.7 с PyGTK. У меня есть фоновый процесс, который прослушивает сокет в цикле while. Я хочу отображать сообщение, когда я получаю его с сервера. Но когда я запускаю gtk.main(), он, очевидно, снова начинает зацикливаться, поэтому мой цикл прослушивания не работает. Мне нужно отображать новое окно для каждого сообщения или закрывать старое окно и отображать новое окно со всеми непрочитанными сообщениями. Могу ли я каким-то образом отобразить окно (или более одного окна) и не блокировать цикл прослушивания?
Решение IOChannel
while True: #listening loop
print 'Start'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.bind((socket.gethostname(), 80))
sock.listen(2)
conn, address = sock.accept()
conn.sendall('200 OK')
fd = conn.fileno() #Make file descriptor from socket
gio_channel = glib.IOChannel(fd) #Pass it to IOChannel
if(new_message):
#display message with gtk.main()
else
#Do something else like update file
subprocess.Popen решение
while True: #listening loop
print 'Start'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.bind((socket.gethostname(), 80))
sock.listen(2)
conn, address = sock.accept()
conn.sendall('200 OK')
all_json = conn.recv(2048)
if(new_message):
# This script run pygtk app in the background
subprocess.Popen(['python', 'communication_app.py'])
else
#Do something else like update file