Асинхронное программирование на 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
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода