Сигналы, слоты и layout-ы

Тема дорожной карты · Python Programming

Механизм signal/slot в Qt заменяет россыпь callback-ов: кнопка эмитит clicked, ты подключаешь любой callable, фреймворк берёт на себя расцепление. Layout-ы (QHBoxLayout, QVBoxLayout, QGridLayout, QFormLayout) автоматически обрабатывают ресайз — ручное размещение виджетов в абсолютных координатах ломает high-DPI и переводы. Типичные грабли: подключение в __init__ к ещё не связанному методу, забытый Qt.QueuedConnection для межпотоковых сигналов, чрезмерно вложенные layout-ы, в которых paint-события начинают доминировать. .ui-файлы из Designer держат разметку отдельно от логики.

Как это работает

Сигналы, слоты и layout-ы в Python ограничен GIL (Global Interpreter Lock) на CPython — только один поток выполняет Python-байткод одновременно. Для CPU-параллелизма используйте multiprocessing (fork или spawn отдельных процессов) или выносите в C-расширения (NumPy, Cython, Rust через PyO3), которые отпускают GIL. Для I/O-bound подходят потоки или asyncio. Инструменты профилирования: cProfile/pstats — call-level, py-spy — sampling production-процессов, memory_profiler — память.

Когда применять

Сначала профилируйте — догадки обычно неверны. multiprocessing — только после измеренного CPU-боттлнека. Для числовых нагрузок попробуйте numpy или polars (на порядки быстрее чистого Python). ctypes или cffi для вызова существующих C-библиотек; Cython/Rust-расширение — когда даже их не хватает. PyPy — drop-in JIT-альтернатива, иногда 3-10x быстрее, но теряет часть совместимости с C-расширениями.

Типичные ошибки

Ловушки Сигналы, слоты и layout-ы: параллелизация тривиально маленьких задач (запуск процесса стоит дороже работы); общее изменяемое состояние между процессами через глобалы (не работает — используйте Queue, Manager, multiprocessing.shared_memory); over-тюнинг горячих путей в чистом Python, когда переписывание в NumPy или вынос в C-расширение даёт 100x; погоня за микрооптимизациями (x[0] vs next(iter(x))) вместо алгоритмических (O(n²) → O(n log n)).

Связанные понятия

Полезные ресурсы