Синтаксис сопрограммы и делегирования

Перед Python 3.5+ был отпущен, asyncio модуль используется генераторы для имитации асинхронных вызовов и , таким образом , был другой синтаксис , чем текущая версия Python 3.5.

В Python 3.5 введены ключевые слова `async` и` await`. Обратите внимание на отсутствие скобок вокруг вызова await func (). `` `import asyncio async def main (): print (await func ()) async def func (): # Делать много времени ... вернуть" Hello, world! " if __name__ == "__main__": loop = asyncio.get_event_loop () loop.run_until_complete (main ()) `` ` До Python 3.5 для определения сопрограммы использовался декоратор `@ asyncio.coroutine`. Выход из выражения был использован для делегирования генератора. Обратите внимание на круглые скобки вокруг `yield from func ()`. `` `import asyncio @ asyncio.coroutine def main (): print ((yield from func ())) @ asyncio.coroutine def func (): # Делать вещи, требующие много времени, возвращать" Hello, world! " if __name__ == "__main__": loop = asyncio.get_event_loop () loop.run_until_complete (main ()) `` ` Вот пример, который показывает, как две функции могут выполняться асинхронно: `` `импорт asyncio async def cor1 (): print (" запуск cor1 ") для i в диапазоне (10): await asyncio.sleep (1.5) print (" cor1 ", i) async def cor2 (): печать (" запуск cor2 ") для i в диапазоне (15): ожидание asyncio.sleep (1) печать (" cor2 ", i) loop = asyncio.get_event_loop () cors = asyncio.wait ([cor1 (), cor2 ()]) loop.run_until_complete (cors) `` `