11.4. Параллельное и асинхронное программирование.

Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Самоучитель Python 3, собранный из материалов данного сайта. Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Параллельное и асинхронное программирование в Python предлагают разнообразные методы эффективной работы с параллелизмом и асинхронностью. Эти подходы позволяют выполнять задачи одновременно или в неблокирующем режиме. Давайте рассмотрим оба подхода, более подробно рассматривая примеры.
 
Параллельное программирование
Параллельное программирование позволяет выполнять несколько задач одновременно, используя для этого несколько процессов или потоков.
 
Модуль `multiprocessing`
Модуль `multiprocessing` позволяет создавать и управлять процессами в Python.
import multiprocessing
import os

def worker():
    print("Процесс:", os.getpid())

if __name__ == "__main__":
    # Создание процесса
    process = multiprocessing.Process(target=worker)
    
    # Запуск процесса
    process.start()
    
    # Ожидание завершения процесса
    process.join()
process.start() - Запускает выполнение процесса. Этот метод вызывает метод run объекта Process, который, в свою очередь, вызывает целевую функцию worker.
process.join() - Блокирует выполнение основного потока до тех пор, пока порожденный процесс не завершит выполнение. Это обеспечивает синхронизацию между процессами и предотвращает преждевременное завершение основного процесса.
 
Модуль `concurrent.futures`
Модуль `concurrent.futures` предоставляет высокоуровневый интерфейс для асинхронного выполнения вызовов функций.
import concurrent.futures

def worker():
    return "Выполнение в потоке"

if __name__ == "__main__":
    # Создание пула потоков
    with concurrent.futures.ThreadPoolExecutor() as executor:
        # Запуск функции в отдельном потоке
        future = executor.submit(worker)
        print(future.result())  # Получение результата выполнения
 
Модуль `threading`
import threading
import time

def worker(name):
    print(f'Starting {name}')
    time.sleep(2)
    print(f'Ending {name}')

threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(f'Thread-{i}',))
    threads.append(t)
    t.start()

for t in threads:
    t.join()
 
Асинхронное программирование
Асинхронное программирование позволяет выполнять задачи в неблокирующем режиме, что увеличивает эффективность работы при вводе/выводе операций.
 
Асинхронное программирование с использованием `asyncio`
Модуль `asyncio` предоставляет асинхронные возможности и позволяет написать асинхронный код.
import asyncio

async def worker():
    return "Выполнение в асинхронной функции"

async def main():
    result = await worker()
    print(result)

if __name__ == "__main__":
    asyncio.run(main())
 
Использование библиотеки `aiohttp` для асинхронной работы с сетью и модулем `asyncio`
import aiohttp
import asyncio

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

async def main():
    html = await fetch_data("https://example.com")
    print(html)

if __name__ == "__main__":
    asyncio.run(main())
 
Сравнение параллельного и асинхронного программирования
Параметр Параллельное программирование Асинхронное программирование
Модель выполнения Многопоточность или многопроцессорность Однопоточность с использованием событийных циклов
Цель Увеличение производительности Повышение отзывчивости и эффективности
Использование CPU Высокое, распределение задач по нескольким ядрам Низкое, переключение контекста на долгих операциях
Примеры задач Обработка больших объемов данных, моделирование Сетевое взаимодействие, взаимодействие с БД
Сложность отладки Высокая, сложно управлять состоянием между потоками Умеренная, более предсказуемое поведение
Инструменты threading, multiprocessing asyncio, aiohttp

категории

ТЕОРИЯ

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы

Мы в соцсетях