PostDataPunk
80 subscribers
360 photos
9 videos
2 links
Download Telegram
Сегодня поснимал на Тимирязевской)
❤14🐳3😍2
Немного фоток с ВДНХ)
🔥8❤‍🔥4❤3👏3🙏1
Итак, я вспомнил, что мой телеграм-канал называется PostDATAPunk.
Поэтому нужно написать несколько постов про ML, Python и т.д.
❤5
Начнём с Python🐍
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Многопроцессность, многопоточность и асинхронность в Python

Прежде чем разобраться, как именно работает параллелизм в Python, важно понять, какие задачи вообще встречаются. Их условно делят на два типа:

1) CPU-bound — задачи, которые упираются в процессор. Это тяжёлые вычисления: машинное обучение, математика, обработка изображений и т.п. Тут ключевое — счёт.

2) I/O-bound — задачи, где процессор почти не нагружен, а время уходит на ожидание: загрузка файлов, сетевые запросы, работа с базами данных. Тут ключевое — простой.

Многопроцессность

Для CPU-bound задач в Python используют многопроцессность.
Каждый процесс — это отдельный Python-интерпретатор со своей памятью. Они реально работают параллельно и не мешают друг другу.

Аналогия: Есть несколько шоссе. Каждое шоссе — это процесс, по нему едут машины (задачи). Все трассы независимы и могут работать одновременно.

Многопоточность и GIL

В Python есть многопоточность, но она ограничена.
Из-за GIL (Global Interpreter Lock) в каждый момент времени только один поток может исполнять Python-байткод.

Аналогия: у трассы несколько полос (потоки), но рабочие (GIL) постоянно перекрывают все полосы, оставляя открытой только одну. Машины вроде бы могут ехать по разным полосам, но реально движется только одна колонна.

Поэтому многопоточность в Python бесполезна для CPU-bound задач — прироста скорости не будет.

Асинхронность

Значит ли это, что многопоточности в Python совсем нет? Не совсем.
Для I/O-bound задач она и асинхронность работают отлично.

Почему? Потому что когда одна задача ждёт (например, ответа от сервера), поток или event loop может переключиться на другую. То есть мы эффективно используем время простоя.

Аналогия: официант в кафе не стоит над твоим столиком, пока готовится еда, а обслуживает других клиентов.

Итог

CPU-bound → многопроцессность (multiprocessing).

I/O-bound → многопоточность (threading) или асинхронность (asyncio).

GIL блокирует параллельное выполнение потоков для вычислительных задач, но не мешает работать с I/O.
❤9🔥3🤯3👍1
Ночные огни Долгопрудного)
❤10🙏2👍1🐳1🍌1💔1
Прекрасный спектакль «Посторонний» в исполнении студенческого театра «Точка» на Физтехе 🎭
❤8❤‍🔥5🐳2🙏1💘1