Асинхронное программирование на Python
Асинхронное программирование — это парадигма программирования, которая позволяет многим процессам выполняться одновременно и независимо, не дожидаясь завершения одного перед переходом к следующему. В этом посте мы рассмотрим, что такое асинхронное программирование и как его использовать в python.
Что такое асинхронное программирование?
При синхронном программировании компьютер выполняет инструкции в последовательном порядке, блокируя выполнение до тех пор, пока задание не будет завершено, прежде чем перейти к следующему.
С другой стороны, асинхронное программирование позволяет программе начать одну операцию, а затем перейти к другой, не останавливая выполнение до тех пор, пока исходная задача не будет завершена.
Асинхронное программирование особенно полезно в условиях, когда выполнение таких процессов, как сетевой ввод-вывод или операции с базой данных, может занять много времени. Асинхронное программирование может помочь повысить производительность и скорость отклика программных приложений, позволяя программе выполнять другие действия, ожидая завершения медленной операции.
В зависимости от используемого языка программирования и инфраструктуры асинхронное программирование может выполняться с использованием различных стратегий, таких как обратные вызовы, промисы или ключевые слова async/await.
Различия между асинхронным программированием и многопроцессорной обработкой
Основное различие между асинхронным программированием и многопроцессорной обработкой заключается в том, что асинхронное программирование позволяет выполнять неблокирующие операции в одном потоке, в то время как многопроцессорная обработка использует множество ядер или процессов для одновременного выполнения работы.
Различия между асинхронным программированием и многопоточностью
Основное различие между асинхронным программированием и многопоточностью заключается в том, что асинхронное программирование позволяет выполнять неблокирующие операции с использованием одного потока, тогда как многопоточность использует несколько потоков для параллельного выполнения нескольких задач.
Для получения дополнительной информации о различиях: Treading, Multiprocessing и асинхронное программирование.
Как использовать Асинцио?
Сначала создадим простую программу, которая начинает выполнять работу по очереди и заканчивает ее.
import time
import asyncio
def do_job(s):
print(f"{s} started")
await asyncio.sleep(1)
print(f"{s} done")
def main():
start = time.perf_counter()
todo = ["Job A", "Job B", "Job C"]
for job in todo:
do_job(job)
end = time.perf_counter()
print(f"Took: {end-start:.3f} seconds")
main()
# OUTPUT
# Job A started
# Job Adone
# Job B started
# Job B done
# Job C started
# Job C done
# Took: 3.009 seconds
Создание и запуск сопрограмм
Сопрограмма — это тип функции, которая может быть прервана и возобновлена в разное время во время выполнения. Другими словами, сопрограмма позволяет вам писать код, который можно прервать, сделать что-то еще, а затем возобновить с того места, где он остановился.
Для создания сопрограмм нам нужно использовать asyncключевое слово перед defключевым словом. Вызов сопрограммы не вызывает функцию, которую мы хотим запустить. Он создает задачу.
import time
import asyncio
async def do_job(s):
...
async def main():
...
main()
asyncio.run(main())
если вы запустите этот код, вы, вероятно, получите примерно такую ошибку:
RuntimeWarning: coroutine '...' was never awaited
import time
import asyncio
async def do_job(s):
print(f"{s} started")
await asyncio.sleep(1)
print(f"{s} done")
async def main():
start = time.perf_counter()
todo = ["Job A", "Job B", "Job C"]
for job in todo:
await do_job(job)
end = time.perf_counter()
print(f"Took: {end-start:.3f} seconds")
asyncio.run(main())
# OUTPUT
# Job A started
# Job A done
# Job B started
# Job B done
# Job C started
# Job C done
# Took: 3.009 seconds
await asyncio.sleep(1)
tasks = [asyncio.create_task(do_job(item)) for item in todo]
done, pending = await asyncio.wait(tasks)
import time
import asyncio
async def do_job(s):
print(f"{s} started")
await asyncio.sleep(1)
print(f"{s} done")
async def main():
start = time.perf_counter()
todo = ["Job A", "Job B", "Job C"]
tasks = [asyncio.create_task(do_job(item)) for item in todo]
done, pending = await asyncio.wait(tasks)
end = time.perf_counter()
print(f"Took: {end-start:.3f} seconds")
asyncio.run(main())
# OUTPUT
# Job A started
# Job B started
# Job C started
# Job A done
# Job B done
# Job C done
# Took: 1.009 seconds
Вы можете посмотреть видео, чтобы получить больше информации об асинхронном программировании в Python. ( Введение в асинхронный Python | Написание веб-краулера )

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































