Python asyncio: асинхронное программирование в Python
<p>Python asyncio - это модуль, введенный в Python 3.4, который предоставляет инструментарий для асинхронного программирования. Он позволяет создавать эффективные и отзывчивые программы, которые могут обрабатывать множество задач одновременно без блокировки основного потока выполнения.</p>
<p>Основным строительным блоком асинхронных программ на Python является корутина. Корутины - это функции, которые могут быть приостановлены и возобновлены в любой момент времени без блокировки всей программы. Подобно генераторам, корутины используют ключевое слово <code>yield</code>, но в отличие от генераторов, они используют <code>yield from</code> для передачи управления другой корутине.</p>
<p>Вот пример простой корутины, которая выполняет задержку и возвращает результат:</p>
<pre class="hljs"><code class="language-python">import asyncio
async def delay(seconds):
await asyncio.sleep(seconds)
return f"Delayed for {seconds} seconds"
async def main():
result = await delay(5)
print(result)
asyncio.run(main())</code></pre>
<p>В этом примере мы импортируем модуль asyncio и определяем корутину delay, которая ожидает указанное количество секунд с помощью asyncio.sleep и возвращает сообщение о задержке.</p>
<p>Затем мы определяем корутину main, в которой мы вызываем задержку и выводим результат.</p>
<p>Наконец, мы создаем цикл событий asyncio.run и передаем ему корутину main для выполнения.</p>
<p>Python asyncio также предоставляет инструменты для параллельного выполнения нескольких корутин. Например, asyncio.gather позволяет запустить несколько корутин одновременно и дождаться их выполнения. Вот пример:</p>
<pre class="hljs"><code class="language-python">import asyncio
async def message(name):
await asyncio.sleep(1)
return f"Hello, {name}!"
async def main():
tasks = [message("Alice"), message("Bob"), message("Carol")]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())</code></pre>
<p>В этом примере мы определяем корутину message, которая ожидает 1 секунду и возвращает приветствие с указанным именем.</p>
<p>Затем мы создаем список задач, каждая из которых вызывает корутину message с разными именами.</p>
<p>Далее мы используем asyncio.gather для запуска всех задач одновременно и ожидаем их выполнения.</p>
<p>Наконец, мы выводим результаты всех задач.</p>
<p>В заключение, Python asyncio является мощным инструментом для асинхронного программирования. Он позволяет создавать эффективные и отзывчивые программы, обрабатывать множество задач одновременно и упрощать асинхронный код. Используйте asyncio, чтобы улучшить производительность и отзывчивость своих программ Python!</p>