Back to questions
VK
Junior — Middle
69
Какими способами можно реализовать параллельное выполнение задач, ограниченных операциями ввода-вывода, в Python?
Companies where asked
Answer from AI
sobes.tech AI
Для параллельного выполнения задач, ограниченных операциями ввода-вывода (I/O-bound), в Python можно использовать следующие подходы:
- Модуль
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())
- Потоки (
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()
- Модуль
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.