Задать вопрос
Ответы пользователя по тегу Асинхронное программирование
  • Как в python 3.4 вернуть несколько значений из сопрограммы (корутины)?

    @bromzh Автор вопроса
    Drugs-driven development
    Ответ подсказали в другом месте. В общем, можно использовать для таких целей очередь:
    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()
    Ответ написан
    Комментировать