Нави Тулаг – От датчика до интерфейса. Практическое руководство по созданию инженерных десктоп приложений на Python и web-технологиях (страница 13)
⚠️ Важно: JS-функции, вызываемые из Python, должны быть глобальными (в window). Не используйте const или let — только function или window.functionName.
6.5. Асинхронность: как не заблокировать UI
Это самая важная тема для инженерных приложений.
Проблема: блокировка при чтении COM-порта
Представьте, что вы читаете данные с Arduino:
Что происходит:
Пользователь нажимает «Читать данные»
Python ждёт ответ от Arduino (может занять секунды)
Интерфейс зависает — нельзя нажать другие кнопки
Через несколько секунд UI обновляется
Решение: threading для фоновых задач
Используйте отдельный поток для долгих операций:
Преимущества подхода:
✅ UI остаётся отзывчивым — можно нажимать кнопки во время чтения
✅ Данные обновляются в реальном времени — каждая строка сразу отображается
✅ Можно остановить чтение — кнопка «Стоп» работает мгновенно
✅ Ошибки обрабатываются корректно — не ломают приложение
6.6. Режим эмуляции: тестирование без железа
Вспомните про DEBUG_MODE из ваших проектов. Вот как это работает в контексте асинхронности:
💡 Совет: Внедряйте режим эмуляции с первого дня разработки. Это сэкономит часы отладки, когда Arduino нет под рукой.
6.7. Обработка ошибок на обеих сторонах
Python → JavaScript
JavaScript → Python
6.8. Частые ошибки и решения
Что мы узнали?
✅ Вызов Python из JS: await eel.function_name(args)() — две пары скобок обязательны.
✅ Вызов JS из Python: eel.js_function()() — функция должна быть глобальной.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.