2016-03-04 3 views
2

Я пытаюсь обернуть голову вокруг новых функциональных функций asyncio, которые появились в Python3.async def и сопрограммы, какая ссылка

Я начал с простого примера рабочего найти на StackOverflow, модифицирована немного:

import asyncio, random 

q = asyncio.Queue() 

@asyncio.coroutine 
def produce(name): 
    while True: 
     value = random.random() 
     yield from q.put(value) 
     print("Produced by {0}".format(name)) 
     yield from asyncio.sleep(1.0 + random.random()) 

@asyncio.coroutine 
def consume(name): 
    while True: 
     value = yield from q.get() 
     print("Consumed by {0} ({1})".format(name, q.qsize())) 
     yield from asyncio.sleep(1.2 + random.random()) 

loop = asyncio.get_event_loop() 
loop.create_task(produce('X')) 
loop.create_task(produce('Y')) 
loop.create_task(consume('A')) 
loop.create_task(consume('B')) 
loop.run_forever() 

основном я понимаю, как это работает (за исключением, возможно, для yield from asyncio.sleep() ... Является ли это заполнитель для делегированного, но функция блокировки? Где она уступает?)

Но, прежде всего, как я мог трансформировать этот пример, чтобы использовать новые ключевые слова 10 и await? И какой будет выигрыш?

ответ

2

Просто замените

@asyncio.coroutine 
def f(arg) 

с

async def f(arg) 

и yield from с await в вашем коде.

Также читайте PEP 412 о async with и async for.

Смежные вопросы