При работе с Python да и другими языками программирования часто возникает необходимость ускорения выполнения кода, масштабирования обработки данных или работы с большим количеством сетевых запросов. Именно в Python для решения этих задач существуют три базовых метода. Это: threading, multiprocessing и asyncio. На первый взгляд – механизмы схожие. Но при детальном разборе ясно, что они решают принципиально разные задачи, опираются на разные модели исполнения и обладают своими ограничениями. В статье расскажу об особенностях каждого метода – будет интересно и познавательно.
Рубрика «threading»
Разбор threading vs multiprocessing vs asyncio в Python
2026-02-01 в 10:15, admin, рубрики: asyncio, CPU-bound, event loop, multiprocessing, python, threading, конкурентность, многопоточность, параллельностьАсинхронность vs. многопоточность: что выживет в эпоху No GIL?
2025-10-06 в 10:41, admin, рубрики: asyncio, cpu, free-threading, GIL, nogil, python, rps, threading, асинхронность, многопоточностьХватит спорить — пора запускать и сравнивать.
Тестируем реальные сценарии, измеряем RPS, смотрим на потребление памяти и разбираемся, когда самая разумная стратегия — это просто подождать и обновить Python на free-threading версию.
Привет! Меня зовут Игорь Анохин, я — руководитель платформенной разработки в K2 Cloud и более 8 лет программирую на Python.
В чём проблема
Хочу поговорить про асинхронность и многопоточностьЧитать полностью »
Многопоточное программирование на C
2025-02-11 в 13:15, admin, рубрики: threading, многопоточное программирование, многопоточность, Си, синхронизация, функции
Многопоточное программирование — это специализированная форма параллельного программирования, которая предполагает выполнение нескольких потоков в рамках одного процесса или приложения. Объясню - каждая система состоит из процессов, а процесс состоит из потоков.Читать полностью »
threading и logging. Как логировать в несколько потоков?
2024-10-08 в 10:45, admin, рубрики: logging, python3, threading, ООП pythonВ своей работе столкнулся с такой проблемой: мне нужно было разделить логирование на несколько потоков, сохранив динамичность в количестве потоков. Сейчас, когда уже разобрался с этим, все не так уж и сложно.
В общем и целом, штудировал я и интернет, и исследовал на практике этот вопрос. Странным оказалось то, что готового решения я не нашел, неужели никто не испытывает проблем с этим? Никто в python не пишет логи?
Начну по порядку и сразу к делу, без дифирамбов.
logging
В python есть замечательный инструмент для работы с логами, ниже листинг простейшей программы:
Читать полностью »
Оптимизация в Python. Эффективное использование модуля threading и asyncio
2024-08-14 в 9:00, admin, рубрики: asyncio, python3, ruvds_статьи, threading, ThreadPoolExecutor, многопоточное программирование
▍ Введение
При создании нового приложения с нуля, где основным ограничивающим фактором является производительность ввода-вывода, использование asyncio может быть вполне оправданным выбором. С самого начала можно интегрировать неблокирующие библиотеки, совместимые с asyncio, такие как asyncpg и aiohttp. Однако большая часть работы может быть связана с поддержкой уже существующего кода, который использует блокирующие библиотеки ввода-вывода, например, requests для HTTP-запросов или psycopg для взаимодействия с базами данных Postgres. Кроме того, возможно, что подходящих библиотек, совместимых с asyncio, просто не существует. В таком случае, как можно извлечь выгоду из конкурентных преимуществ, которые предлагает asyncio?
Многопоточность предоставляет решение для данной задачи. Поскольку блокирующие операции ввода-вывода освобождают глобальную блокировку интерпретатора, мы можем выполнять ввод-вывод параллельно в различных потоках. Аналогично библиотеке multiprocessing, asyncio позволяет использовать пулы потоков, что даёт нам все преимущества многопоточности, не отказываясь от таких API, как gather и wait.Читать полностью »
Многопоточный Python на примерах: избавляемся от дедлоков
2022-06-16 в 8:15, admin, рубрики: deadlocks, dfs, graph, python, python3, threading, wfg, Блог компании Ozon Tech, параллельное программирование, ПрограммированиеДедлоки — распространенная проблема в многопоточном программировании. В больших приложениях вручную отслеживать порядок блокировок может быть достаточно сложно, причем эта проблема может не всплыть на этапе тестирования и случиться только в каких-то сложновоспроизводимых кейсах при реальном использовании. Существует много способов их избегания, но здесь мы рассмотрим только один — автоматическое выявление дедлоков на основе графа ожидания.
Многопоточный Python на примерах: как правильно хранить настройки приложения
2021-11-18 в 8:04, admin, рубрики: python, python3, threading, Блог компании ДомКлик, параллельное программирование
Если опустить первое и самое главное предубеждение относительно питонячьей многопоточности у большинства программистов — что её не существует из-за GILЧитать полностью »
Как эффективнее читать данные с диска (при условии, что у вас .Net)
2017-06-27 в 7:12, admin, рубрики: .net, async, asyncawait, await, comparison, hdd, io bound, io operation, microsoft .net, performance comparison, ssd, task, thread, threading, windows, Блог компании Технологический Центр Дойче Банка, Программирование, разработка под windows, сценарии, Тестирование IT-систем, чтение данных, чтение данных с диска
Привет!
Некоторое время назад меня заинтересовал вопрос: как эффективнее всего читать данные с диска (при условии, что у вас .Net)? Задача чтения кучи файлов встречается во множестве программ, которые при самом старте начинают вычитывать конфигурации, некоторые самостоятельно подгружают модули и т.д.
В интернете я не нашел подобных сравнений (если не считать тюнинга под определенные конфигурации).
Читать полностью »
Чистим лук (но не плачем): методики оптимизации
2016-05-24 в 9:51, admin, рубрики: Code for Good, fortran, openmp, optimization, parallel computing, threading, Блог компании Intel, ПрограммированиеЭта статья представляет собой формализованный ответ на публикацию на форуме IDZ. Проблема, которую описывал автор исходной публикации, заключалась в том, что производительность работы кода не увеличивалась в достаточной степени при использовании OpenMP на 8-ядерном процессоре E5-2650 V2 с 16 аппаратными потоками. Потребовалось некоторое время на форуме, чтобы помочь автору публикации и предоставить ему необходимые подсказки, однако времени для оптимизации кода было недостаточно. В этой статье описываются дальнейшие методики оптимизации в дополнение к описанным на форуме IDZ.

Потокобезопасные сигналы, которыми действительно удобно пользоваться
2016-03-22 в 8:06, admin, рубрики: c++, signals, threading, потоки, Программирование В мире существует множество библиотек, реализующих сигналы в C++. К сожалению, у всех реализаций, с которыми я сталкивался, есть несколько проблем, которые не позволяют писать простой многопоточный код с использованием этих библиотек. Здесь я расскажу об этих проблемах, и о том, как их можно решить.
Читать полностью »
