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
да Нет Уже установлено:
import asyncio
Если эта команда не сообщает об ошибке, то это означает asyncio
Уже установлено. Если сообщается об ошибке, то нужно пройти pip установить asyncio
Библиотека. существуют в командной строке середина введите следующую команду:
pip install asyncio
если твой Python Окружающая средада 3.3 или ниже, то вам необходимо установить Trollius Библиотека, вот эта asyncio
из альтернатив. Вы можете передать следующую команду install Trollius Библиотека:
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
,Эта функция вычисляет куб ряда чисел и печатает результат:
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
Ключевое слово для звонка:
# Только один будет возвращен coroutine Объект не выполняет функции
def main():
do_something()
# Хотите использовать run выполнить
asyncio.run(do_something())
# Или его можно вызвать в середине другой асинхронной функции.
асинхронный def main():
await do_something() # Асинхронная функция проходит await позвонить, ждать можно только выпуститьсуществовать async внутри функции
asyncio.run(main())
Мы также можем запускать асинхронные функции через API старого стиля:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Если нам нужно выполнить несколько асинхронных функций одновременно, нам нужно определить асинхронную функцию как задача. мы можем использовать asyncio.create_task
создать задание, затем используйте await
ключевое слово, чтобы начать все task:
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:
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:
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 выполнить。Мы можем использовать следующий способсоздатьи Цикл событий операции:
# 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 Запустите цикл событий:
# create an executor
with ThreadPoolExecutor() as exe:
# execute a function in event loop using executor
loop.run_in_executor(exe, task)
Вот и все Python середина asyncio
Базовое использование библиотеки. Надеюсь, это будет вам полезно.