Sobes.tech
Back to questions
Junior — Middle
69

Какими способами можно реализовать параллельное выполнение задач, ограниченных операциями ввода-вывода, в Python?

Companies where asked
VKVK

Answer from AI

sobes.tech AI

Для параллельного выполнения задач, ограниченных операциями ввода-вывода (I/O-bound), в Python можно использовать следующие подходы:

  1. Модуль asyncio — асинхронное программирование с использованием корутин. Позволяет эффективно обрабатывать множество I/O операций без создания большого числа потоков.
import asyncio

async def fetch_data():
    await asyncio.sleep(1)  # имитация I/O операции
    return 'data'

async def main():
    results = await asyncio.gather(fetch_data(), fetch_data())
    print(results)

asyncio.run(main())
  1. Потоки (threading) — для I/O задач потоки работают эффективно, так как GIL не блокирует операции ввода-вывода.
import threading

def io_task():
    import time
    time.sleep(1)  # имитация I/O
    print('Task done')

threads = [threading.Thread(target=io_task) for _ in range(5)]
for t in threads:
    t.start()
for t in threads:
    t.join()
  1. Модуль concurrent.futures.ThreadPoolExecutor — удобный способ управлять пулом потоков.
from concurrent.futures import ThreadPoolExecutor
import time

def io_task():
    time.sleep(1)
    return 'done'

with ThreadPoolExecutor(max_workers=5) as executor:
    futures = [executor.submit(io_task) for _ in range(5)]
    for future in futures:
        print(future.result())

Выбор зависит от конкретной задачи и архитектуры приложения, но для масштабируемых сетевых приложений часто предпочтителен asyncio.