Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 8, 2011 16:46:40

Gifts
От:
Зарегистрирован: 2010-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Asyncore и GUI

Здравствуйте,

Есть некое консольное приложение реализующее сервер на основе asyncore и asynchat. Сейчас появилась идея прикрутить к этому делу графическую оболочку на PySide (PyQt), которая будет осуществлять управление сервером и отображение статус соединений.

Собственно вопрос - как правильно осуществить это объединение, чтобы части не мешали друг другу. То есть, например, не происходило блокировок интерфейса и/или соединений. Стоит ли этого бояться?

Как я предполагаю - главный поток создает дополнительный поток (или лучше процесс из multiprocessing?) с помощью threading. Далее главный поток занимается обработкой сообщений окон PyQt. Дополнительный поток занимается только asyncore.loop(). В классах обрабатывающих сетевые соединения - нужно будет просто вырабатывать сигналы PyQt

Понимаю, что хорошо бы это все написать и самому проверить, благо не так много, но идти неправильным путем, чтобы потом постоянно подставлять костыли

P.S. Насколько жизнеспособен сокет-сервер на asyncore? Или, если проект вырастет нужно будет его переписывать на чем-то другом? В пределах питона или нет?
P.S.S. система на ubuntu 9.10, python 2.6



Отредактировано (Фев. 8, 2011 16:48:33)

Офлайн

#2 Фев. 9, 2011 16:25:30

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Asyncore и GUI

Я бы вообще не смешивал эти сущности.

Сделайте ручки в своем сервере для задания настроек и мониторинга, а GUI часть сделайте отдельным приложением, которое эти ручки исполользует.



Офлайн

#3 Фев. 9, 2011 16:58:06

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

Asyncore и GUI

смотрим на примере твистеда как интегрироваться в qt mainloop. крутить любой из мейнлупов в треде - очень плохая идея.
multiprocessing при правильном использовании будет работать.



Офлайн

#4 Фев. 10, 2011 00:16:53

Gifts
От:
Зарегистрирован: 2010-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Asyncore и GUI

Александр Кошелев спасибо, но как-то слишком абстрактно. Вы предлагаете городить еще один сетевой протокол и в ГУИ приложении будет просто один сокет, вместо множества? А что делать, если потребуется прокачивать через него множество данных, аля WireShark?

cybergrind спасибо за наводку. Насколько я вижу, основная суть в использовании QSocketNotifier для опроса готовности сокетов + дополнительный таймер, чтобы выполнять некие действия из Twisted. То есть достаточно подложить под обработчики из asyncore прокладку в виде QSocketNotifier и выкинуть asyncore.loop()?

крутить любой из мейнлупов в треде - очень плохая идея.
А можно про это чуть подробнее? Что такого криминального обработке некоего количества (пусть и достаточно большого) неблокируемых сокетов в отдельном потоке (ведь asyncore по сути делает только это, почти без лишних действий). Ведь если не пихать в него огромные обработчики, то почти 99% времени он будет сидеть в ожидании I/O. Конечно, ему приоритет может не придти долго, но тут уже больше проблемы разработчика



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version