Как в python 3.4 вернуть несколько значений из сопрограммы (корутины)?
Ответ подсказали в другом месте. В общем, можно использовать для таких целей очередь:import random
import asyncio

@asyncio.coroutine
def coro(que: asyncio.Queue):
    res = 0

    t = random.random() * 3
    yield from que.put('start 1')
    yield from asyncio.sleep(t)
    yield from que.put('value 1 = {}'.format(t))
    res += t

    t = random.random() * 3
    yield from que.put('start 2')
    yield from asyncio.sleep(t)
    yield from que.put('value 2 = {}'.format(t))
    res += t

    t = random.random() * 3
    yield from que.put('start 3')
    yield from asyncio.sleep(t)
    yield from que.put('value 3 = {}'.format(t))
    res += t

    yield from que.put(None)
    return res

@asyncio.coroutine
def run(que: asyncio.Queue):
    while True:
        res = yield from que.get()
        if res is None:
            break
        print(res)

q = asyncio.Queue()
asyncio.async(run(q))
asyncio.async(coro(q))
asyncio.get_event_loop().run_forever()
Стоит добавить (мало ли кто еще сюда зайдет), что в Python 3.6 появились асинхронные генераторы и теперь асинхронные функции могут использовать выражение yield