Хорошо, у меня есть приложение, написанное с помощью cherrypy, и я хочу создать для него wxpython gui. Проблема в том, что оба модуля используют замкнутый цикл для обработки событий, который (я предполагаю) означает, что при запуске другой будет заблокирован.
Я попросил совета, и мне было предложено объединить два цикла событий, а не использовать точки входа запаса (quickloop() для cherrypy и MainLoop() для wx)
Проблема в том, что я понятия не имею, как это сделать. Любые советы были бы с благодарностью.
Вы уже задали один и тот же вопрос: cherrypy и wxpython, и я дал вам лучший ответ, который вы найдете где угодно, который был проголосован и вы одобрили, по-видимому. Почему вы снова спрашиваете?
В случае черри, у вас есть источник. Посмотрите в коде, что делает quickloop()
, а затем попытайтесь объединить этот код с MainLoop()
WX.
Оба цикла, вероятно, будут выглядеть так:
while (true) {
if (pendingEvents()) processEvents ();
else waitForEvents ();
}
Вы должны найти способ объединить два ожидающих вызова в один (так что код будет продолжаться, если у какого-либо источника события были ожидающие события). Для WX посмотрите Dispatch()
, Pending()
и ProcessIdle()
.
Или вы можете посмотреть wxIdleEvent
(см. документы) и обработать все вишневые события там.
Другим решением может быть запуск двух циклов в разных потоках. В этом случае вы не можете вызывать методы WX из вишневого кода и наоборот. Чтобы решить эту проблему, вы должны найти способ отправить сообщения в другой поток со всей информацией, какой метод вызывать. Это гарантирует, что WX-методы будут выполняться в потоке WX, а методы cherrypy будут выполняться в вихревом потоке.