TGViewer
Channel Public Channel
PostDataPunk

PostDataPunk

@postdatapunk

Subscribers
80
Photos
360
Videos
9
Links
2

Showing posts older than #144 · Back to latest

Older Posts 7 shown
Post #143 225
Многопроцессность, многопоточность и асинхронность в 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
Post #142 173
Начнём с Python🐍
  • ❤ 3
Post #141 177
Итак, я вспомнил, что мой телеграм-канал называется PostDATAPunk.
Поэтому нужно написать несколько постов про ML, Python и т.д.
  • ❤ 5
Post #136 191
Немного фоток с ВДНХ)
  • 🔥 8
  • ❤‍🔥 4
  • ❤ 3
  • 👏 3
  • 🙏 1
Post #132 201
Сегодня поснимал на Тимирязевской)
  • ❤ 14
  • 🐳 3
  • 😍 2
Post #125 187
Воробьёвы горы сегодня вечером)
  • ❤ 12
  • ❤‍🔥 5
  • 🔥 4
  • 🥰 1
Post #117 174
Как вообще создавались эти фотографии? Я снимал их на зеркальную камеру Canon Mark III. Для первых четырёх кадров использовал зум-объектив с переменным фокусным расстоянием 24–105 мм — это тот длинный объектив справа на фото. Фокусное расстояние 105 мм на полнокадровой матрице примерно соответствует приближению ×4 на iPhone, то есть даёт хороший зум. Но у него есть минус — максимальная диафрагма f/4.0, что делает его довольно «тёмным» для ночных съёмок.

Поэтому после заката я поставил объектив 50 мм (он сейчас установлен на фотоаппарате). Это фокусное расстояние примерно соответствует ×2 на iPhone. С его помощью уже не получится снять дальние здания, зато диафрагма f/1.4 позволяет делать отличные фотографии в темноте, а заодно создаёт красивое боке — как на седьмом снимке)
  • ❤ 6
  • 🥰 2
  • 🔥 1
  • 🐳 1
  • 🍌 1
  • 💋 1
  • 🤝 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →