Асинхронное программирование на Python: глубокое понимание и использование библиотеки asyncio
Асинхронное программирование на Python: глубокое понимание и использование библиотеки asyncio

asyncio да Python из Встроенная библиотека, которая в основном используется для написания однопоточного параллелизма, в основном реализованного через сопрограммы. Эта библиотека существует Python 3.4 представлен в версии 1 как Python асинхронный I/O Платформа предоставляет модель параллелизма, основанную на цикле событий.

существовать Python 3.4 Раньше Питон Параллелизм в основном опирается на многопоточность и многопроцессность, но оба метода имеют свои ограничения. Многопоточность ограничена глобальной блокировкой интерпретатора (GIL) и не может полностью использовать несколько ядер. ПРОЦЕССОР. Хотя несколько процессов могут использовать преимущества нескольких ядер ЦП, но связь между процессами сложна и дорога. Следовательно, Питон Сообщество начало искать новые решения для параллелизма и в конечном итоге существовало. Python 3.4 введено в asyncio

asyncio из Основные возможности Петля событий иCoroutine. Цикл событий asyncio Ядро можно понимать как бесконечный цикл, и мы можем помещать некоторые функции (через async Определенная функция (называемая сопрограммой) регистрируется в цикле событий, и когда условия для возникновения события выполняются, вызывается соответствующая функция сопрограммы.

Сопрограмма да asyncio Еще одна важная концепция. Сопрограммы более легкие, чем потоки. Планирование сопрограмм полностью контролируется пользователем. Переключение между сопрограммами не требует системных вызовов и требует минимальных затрат. Питон Сопрограммы не являются потокобезопасными, они должны выполняться в одном потоке. Если вы хотите существовать, используйте многопоточность В Coroutines вам необходимо создать цикл событий для каждого потока.

Python 3.5 пара версий asyncio Были внесены дальнейшие улучшения, введены новые ключевые слова. async и await,Делает определение сопрограммы и вызов более кратким и понятным.

Python 3.7 пара версий asyncio Были сделаны некоторые оптимизации и улучшения, такие как asyncio.run() Подожди нового API делает запуск и управление сопрограммами более удобным.

В общем,asyncio Введение Python существоватьиметь дело с I/O При выполнении интенсивных задач параллельное программирование может выполняться более эффективно, что значительно улучшает Python производительность.

существовать Python используется в asyncio библиотеке, сначала убедитесь, что ваша Python Эта библиотека уже установлена ​​в среде. если твой Python Окружающая средада 3.4 или позже, тогда asyncio Библиотека уже должна быть установлена ​​по умолчанию. Вы можете проверить, выполнив следующую команду asyncio да Нет Уже установлено:

Язык кода:python
кодКоличество запусков:0
копировать
import asyncio

Если эта команда не сообщает об ошибке, то это означает asyncio Уже установлено. Если сообщается об ошибке, то нужно пройти pip установить asyncio Библиотека. существуют в командной строке середина введите следующую команду:

Язык кода:bash
копировать
pip install asyncio

если твой Python Окружающая средада 3.3 или ниже, то вам необходимо установить Trollius Библиотека, вот эта asyncio из альтернатив. Вы можете передать следующую команду install Trollius Библиотека:

Язык кода:bash
копировать
pip install trollius

После завершения установки вы сможете существовать Python Импортировать в коде asyncio библиотеку и использовать ее функционал. Например, вы можете определить асинхронную функцию, а затем использовать asyncio.run() для запуска этой функции. Вы также можете использовать asyncio.create_task() создать задачу, а затем использовать asyncio.run() для запуска этой задачи.

Кроме того, вы можете использовать asyncio функция цикла событий. Цикл событий asyncio Основная часть позволяет управлять и планировать несколько асинхронных задач. ты можешь использовать asyncio.get_event_loop() чтобы получить текущий цикл событий, а затем использовать цикл событий run_until_complete() метод для запуска задачи или используйте цикл событий run_forever() Метод для непрерывного запуска цикла событий.

В общем,asyncio Библиотека предоставляет простой и эффективный способ обработки асинхронных I/O операции, которые могут помочь вам писать более эффективно Python код.

Использование асинхронно

существовать Python , мы можем использовать asyncio библиотека для реализации асинхронного I/O действовать. Эта библиотека использует концепцию сопрограммы, которая позволяет нам реализовывать параллельные операции в однопоточной среде.

Во-первых, нам нужно определить асинхронную функцию. Эту функцию необходимо использовать. async Ключевые слова определены. Например, мы определяем простую асинхронную функцию do_something,Эта функция вычисляет куб ряда чисел и печатает результат:

Язык кода:python
кодКоличество запусков:0
копировать
import asyncio

async def do_something():
    l = []
    for i in range(10000):
        l.append(i ** 3)
    print(len(l))
    print(\"finish.\")

Асинхронные функции должны использовать await Ключевое слово для звонка. Если мы вызовем функцию async напрямую, она просто вернет coroutine Объект не выполняет функции. нам нужно использовать asyncio.run Для выполнения асинхронной функции или существования других асинхронных функций используется в await Ключевое слово для звонка:

Язык кода:python
кодКоличество запусков:0
копировать
# Только один будет возвращен coroutine Объект не выполняет функции
def main():
    do_something()

# Хотите использовать run выполнить
asyncio.run(do_something())

# Или его можно вызвать в середине другой асинхронной функции.
асинхронный def main():
    await do_something() # Асинхронная функция проходит await позвонить, ждать можно только выпуститьсуществовать async внутри функции

asyncio.run(main())

Мы также можем запускать асинхронные функции через API старого стиля:

Язык кода:python
кодКоличество запусков:0
копировать
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Если нам нужно выполнить несколько асинхронных функций одновременно, нам нужно определить асинхронную функцию как задача. мы можем использовать asyncio.create_task создать задание, затем используйте await ключевое слово, чтобы начать все task:

Язык кода:python
кодКоличество запусков:0
копировать
async def main():
    print(f\"started at {time.strftime('%X')}\")
    task1 = asyncio.create_task(do_something_cost_time(\"WashClothes\", 2))
    task2 = asyncio.create_task(do_something_cost_time(\"WatchTV\", 5))
    task3 = asyncio.create_task(do_something_cost_time(\"FeedBaby\", 3))
    await task1 
    await task2
    await task3
    print(f\"finished at {time.strftime('%X')}\") 
asyncio.run(main())

Мы также можем использовать asyncio.gather определено и выполняется одновременно tasks:

Язык кода:python
кодКоличество запусков:0
копировать
async def main():
    await asyncio.gather(
        do_something_cost_time(\"WashClothes\", 2),
        do_something_cost_time(\"WatchTV\", 5),
        do_something_cost_time(\"FeedBaby\", 3),
    )
    
asyncio.run(main())

Или запустите через устаревший API:

Язык кода:python
кодКоличество запусков:0
копировать
loop = asyncio.get_event_loop()
tasks = [
    do_something_cost_time(\"WashClothes\", 2),
    do_something_cost_time(\"WatchTV\", 5),
    do_something_cost_time(\"FeedBaby\", 3),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

существовать asyncio , цикл событий (Событие Петля) да – очень важное понятие. Цикл событий из CoredaA Очередь, существует цикл середина непрерывно pop Следующий ready из callback выполнить。Мы можем использовать следующий способсоздатьи Цикл событий операции:

Язык кода:python
кодКоличество запусков:0
копировать
# create and access a new asyncio event loop
loop = asyncio.new_event_loop()

# access the running event loop
loop = asyncio.get_running_loop()

# to execute a task (blocking)
loop.run_until_complete(asyncio.sleep(2))

# schedule a task (non blocking)
task = loop.create_task(asyncio.sleep(2))

# close the event loop
loop.close()

# stop the event loop
loop.stop()

# run forever until stopped
loop.run_forever()

# check loop status
loop.is_running()
loop.is_closed()

мы также можемсуществовать Process/Thread Executor Запустите цикл событий:

Язык кода:python
кодКоличество запусков:0
копировать
# create an executor
with ThreadPoolExecutor() as exe:
    # execute a function in event loop using executor
    loop.run_in_executor(exe, task)

Вот и все Python середина asyncio Базовое использование библиотеки. Надеюсь, это будет вам полезно.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose