r2d2_565
Май 13, 2018 13:17:17
Добрый день!
В приложении которое я пишу есть два loop:
1. asyncore.loop()
2. root.mainloop()
Мне надо чтобы они работали вечно и одновременно. Как это сделать?
Пробовал вместо root.mainloop() ставить while true root.update() и тогда одно ядро получало 100% загрузки. Разве это правильно?
doza_and
Май 13, 2018 18:23:02
r2d2_565
Разве это правильно?
Вам решать. Обычно так не делают. Обычно в loop делают функцию on idle в которой можно подергать чужой loop. в asyncio такого нет. Простейший вариант вызвать root.loop из run_in_executor
https://docs.python.org/3/library/asyncio-eventloop.html 18.5.1.13. Executor. Но тогда сами будете синхронизировать два цикла.. Возможен вариант когда вы после root.update() делаете await asincio.sleep(0.1) и даете процессору отдохнуть тоже самое но короче получится с call_later.
r2d2_565
Май 14, 2018 13:07:31
Должен существовать какой-то способ, чтобы все события обрабатывались!
Например мне надо tk.mainloop(), который вызывает события мышки, клавы и отрисовки формы, но мне надо и чтобы событие прихода пакета на мой сокет тоже вызывалось сразу после завершения текущего задания.
Нельзя было сделать генеральный loop по всем событиям питона, чтобы ядро питона фильтровало windows messages и ставило их в питон очередь, а loop вызывал колбэки?
Как это сделать?
План Б: Проверять приход пакета на сокет по времени каждые 0.5 секунды tk.onidle, а на asynsock забыть.
PEHDOM
Май 14, 2018 16:00:22
r2d2_565
Должен существовать какой-то способ, чтобы все события обрабатывались!
ну можно использовать потоки или процессы и организовать между ними взаимодействие, или писать свой
велосипед mainloop.
Илил встроить ткмаинлуп в асинкио типа такого
http://www.pythonexample.com/code/python-tkinter-asyncio/ посмотрите еще тут
https://github.com/fluentpython/asyncio-tkinterможет чтто полезное найдете..
doza_and
Май 16, 2018 00:02:02
r2d2_565
Как это сделать?
Я однажды делал так что asyncio mainloop был одновременно и gui event loop для wxpython. могу показать если надо. Делал естественно без тредов. Но для этого пришлось смотреть исходники wxpython. Аналогичная штука есть и для pyqt. Для Tkinter думаю никто этого не делал по причине бесполезности последнего в сложных gui проектах.
r2d2_565
Май 16, 2018 10:00:34
ОС порождает события, дрова порождают события! Методы обрабатывают события! Пока питон не сделает нормальный обработчик событий он останется языком “для поиграться” и языком для изобретания обходов непредсказуемого поведения. И это должен быть первый параграф в мануале.
Тема закрыта.