Telegram Group & Telegram Channel
🚀 Параллелизм в Python: Многопоточность, Многопроцессорность и Асинхронность — раз и навсегда по полочкам!

Python — не только про скрипты и автоматизацию. Он умеет работать сразу с несколькими задачами параллельно — и делать это красиво. Но тут есть нюансы: GIL, multiprocessing, asyncio... разберём всё!

👨‍💻 Процессы vs Потоки vs Асинхронность

* Процессы (multiprocessing) — как отдельные контейнеры. Изолированы, не делят память. Каждый процесс может использовать своё ядро процессора. Идеально для вычислений.
* Потоки (threading) — живут в одном процессе и делят между собой память. Отлично справляются с задачами, связанными с вводом/выводом (например, скачивание файлов).
* Асинхронность (asyncio) — не параллельность в классическом смысле. Всё работает в одном потоке, но задачи переключаются между собой, не блокируя выполнение. Лучший выбор для работы с сетью.

💬 А что там с GIL?

GIL — глобальная блокировка интерпретатора в Python. Она позволяет одновременно выполняться только одному потоку Python-кода, даже если у тебя 64 ядра. Почему так? Потому что управление памятью в CPython не потокобезопасно.

⚠️ Важно: GIL не мешает использовать multiprocessing, потому что каждый процесс имеет свой интерпретатор.

⚙️ Какой инструмент для чего?

💥 multiprocessing

> Идеален для тяжёлых вычислений на нескольких ядрах.

* Process — запуск нового процесса
* Pool — пул воркеров
* Queue, Pipe — обмен данными
* Manager — разделение объектов между процессами
* Lock, Semaphore — синхронизация
* cpu_count() — сколько у тебя вообще ядер?

⚡️ threading

> Для I/O задач, где важна отзывчивость: загрузка веб-страниц, параллельный логинг и т.д.

* Thread — запуск нового потока
* Timer, Event, Barrier — управление временем и синхронизацией
* enumerate(), current_thread() — управление потоками

🌐 asyncio

> Современный подход: запуск кучи задач внутри одного потока.

* async / await — ключевые слова
* asyncio.run(), asyncio.gather() — запуск корутин
* Поддержка библиотек:

* aiohttp — запросы к сайтам
* aiofiles — работа с файлами

🔒 Условия гонки и безопасность

Race condition (состояние гонки) — когда два потока одновременно хотят изменить одну и ту же переменную. Кто первый встал — того и тапки. Итог: баги, которых потом не найдёшь.

Потокобезопасность достигается через:

* Lock, RLock
* Локальные данные потока (threading.local())


Асинхронность в деталях

Асинхронная программа:

* запускает задачу;
* пока ждёт ответа — делает что-то ещё;
* возвращается к задаче, когда пришёл ответ.

Пример:

import asyncio
import aiohttp

async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()

async def main():
html = await fetch('https://example.com')
print(html)

asyncio.run(main())


📌 Главное по теме:

🔧 Сравнение подходов:

📌 multiprocessing
• Параллельность:
• Делит память:
• Для чего: тяжёлые CPU-задачи

📌 threading
• Параллельность: (из-за GIL)
• Делит память:
• Для чего: задачи с вводом/выводом (I/O)

📌 asyncio
• Параллельность:
• Делит память:
• Для чего: сетевые и файловые задачи


🔥 Закрепим:

* Нужна мощь ядра? — multiprocessing
* Много сетевых вызовов и ожиданий? — asyncio
* Быстрая и простая многозадачность? — threading
* GIL — особенность Python, но не приговор

📂 Сохраняй шпаргалку, пригодится!

@python2day

#doc #python #cheatsheet
Please open Telegram to view this post
VIEW IN TELEGRAM



tg-me.com/python2day/6652
Create:
Last Update:

🚀 Параллелизм в Python: Многопоточность, Многопроцессорность и Асинхронность — раз и навсегда по полочкам!

Python — не только про скрипты и автоматизацию. Он умеет работать сразу с несколькими задачами параллельно — и делать это красиво. Но тут есть нюансы: GIL, multiprocessing, asyncio... разберём всё!

👨‍💻 Процессы vs Потоки vs Асинхронность

* Процессы (multiprocessing) — как отдельные контейнеры. Изолированы, не делят память. Каждый процесс может использовать своё ядро процессора. Идеально для вычислений.
* Потоки (threading) — живут в одном процессе и делят между собой память. Отлично справляются с задачами, связанными с вводом/выводом (например, скачивание файлов).
* Асинхронность (asyncio) — не параллельность в классическом смысле. Всё работает в одном потоке, но задачи переключаются между собой, не блокируя выполнение. Лучший выбор для работы с сетью.

💬 А что там с GIL?

GIL — глобальная блокировка интерпретатора в Python. Она позволяет одновременно выполняться только одному потоку Python-кода, даже если у тебя 64 ядра. Почему так? Потому что управление памятью в CPython не потокобезопасно.

⚠️ Важно: GIL не мешает использовать multiprocessing, потому что каждый процесс имеет свой интерпретатор.

⚙️ Какой инструмент для чего?

💥 multiprocessing

> Идеален для тяжёлых вычислений на нескольких ядрах.

* Process — запуск нового процесса
* Pool — пул воркеров
* Queue, Pipe — обмен данными
* Manager — разделение объектов между процессами
* Lock, Semaphore — синхронизация
* cpu_count() — сколько у тебя вообще ядер?

⚡️ threading

> Для I/O задач, где важна отзывчивость: загрузка веб-страниц, параллельный логинг и т.д.

* Thread — запуск нового потока
* Timer, Event, Barrier — управление временем и синхронизацией
* enumerate(), current_thread() — управление потоками

🌐 asyncio

> Современный подход: запуск кучи задач внутри одного потока.

* async / await — ключевые слова
* asyncio.run(), asyncio.gather() — запуск корутин
* Поддержка библиотек:

* aiohttp — запросы к сайтам
* aiofiles — работа с файлами

🔒 Условия гонки и безопасность

Race condition (состояние гонки) — когда два потока одновременно хотят изменить одну и ту же переменную. Кто первый встал — того и тапки. Итог: баги, которых потом не найдёшь.

Потокобезопасность достигается через:

* Lock, RLock
* Локальные данные потока (threading.local())


Асинхронность в деталях

Асинхронная программа:

* запускает задачу;
* пока ждёт ответа — делает что-то ещё;
* возвращается к задаче, когда пришёл ответ.

Пример:

import asyncio
import aiohttp

async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()

async def main():
html = await fetch('https://example.com')
print(html)

asyncio.run(main())


📌 Главное по теме:

🔧 Сравнение подходов:

📌 multiprocessing
• Параллельность:
• Делит память:
• Для чего: тяжёлые CPU-задачи

📌 threading
• Параллельность: (из-за GIL)
• Делит память:
• Для чего: задачи с вводом/выводом (I/O)

📌 asyncio
• Параллельность:
• Делит память:
• Для чего: сетевые и файловые задачи


🔥 Закрепим:

* Нужна мощь ядра? — multiprocessing
* Много сетевых вызовов и ожиданий? — asyncio
* Быстрая и простая многозадачность? — threading
* GIL — особенность Python, но не приговор

📂 Сохраняй шпаргалку, пригодится!

@python2day

#doc #python #cheatsheet

BY [PYTHON:TODAY]




Share with your friend now:
tg-me.com/python2day/6652

View MORE
Open in Telegram


PYTHON:TODAY Telegram | DID YOU KNOW?

Date: |

The global forecast for the Asian markets is murky following recent volatility, with crude oil prices providing support in what has been an otherwise tough month. The European markets were down and the U.S. bourses were mixed and flat and the Asian markets figure to split the difference.The TSE finished modestly lower on Friday following losses from the financial shares and property stocks.For the day, the index sank 15.09 points or 0.49 percent to finish at 3,061.35 after trading between 3,057.84 and 3,089.78. Volume was 1.39 billion shares worth 1.30 billion Singapore dollars. There were 285 decliners and 184 gainers.

Telegram hopes to raise $1bn with a convertible bond private placement

The super secure UAE-based Telegram messenger service, developed by Russian-born software icon Pavel Durov, is looking to raise $1bn through a bond placement to a limited number of investors from Russia, Europe, Asia and the Middle East, the Kommersant daily reported citing unnamed sources on February 18, 2021.The issue reportedly comprises exchange bonds that could be converted into equity in the messaging service that is currently 100% owned by Durov and his brother Nikolai.Kommersant reports that the price of the conversion would be at a 10% discount to a potential IPO should it happen within five years.The minimum bond placement is said to be set at $50mn, but could be lowered to $10mn. Five-year bonds could carry an annual coupon of 7-8%.

PYTHON:TODAY from us


Telegram [PYTHON:TODAY]
FROM USA