python - 从作为异步任务运行的函数中获取值

标签 python python-3.x python-3.4 python-asyncio

我正在尝试以下代码:

import asyncio

@asyncio.coroutine
def func_normal():
        print("A")
        yield from asyncio.sleep(5)
        print("B")
        return 'saad'

@asyncio.coroutine
def func_infinite():
    i = 0
    while i<10:
        print("--"+str(i))
        i = i+1
    return('saad2')

loop = asyncio.get_event_loop()

tasks = [
    asyncio.async(func_normal()),
    asyncio.async(func_infinite())]

loop.run_until_complete(asyncio.wait(tasks))
loop.close()

我不知道如何从这些函数中获取变量中的值。我不能这样做:

asyncio.async(a = func_infinite())

因为这会使 this 成为关键字参数。我该怎么做呢?

最佳答案

协程按原样工作。只需使用 loop.run_until_complete()call asyncio.gather() to collect multiple results 的返回值:

#!/usr/bin/env python3
import asyncio

@asyncio.coroutine
def func_normal():
    print('A')
    yield from asyncio.sleep(5)
    print('B')
    return 'saad'

@asyncio.coroutine
def func_infinite():
    for i in range(10):
        print("--%d" % i)
    return 'saad2'

loop = asyncio.get_event_loop()
tasks = func_normal(), func_infinite()
a, b = loop.run_until_complete(asyncio.gather(*tasks))
print("func_normal()={a}, func_infinite()={b}".format(**vars()))
loop.close()

输出

--0
--1
--2
--3
--4
--5
--6
--7
--8
--9
A
B
func_normal()=saad, func_infinite()=saad2

关于python - 从作为异步任务运行的函数中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456881/

相关文章:

Python 抛出随机 KeyError。会不会是计算能力不够?

python - 位置应由两个数值组成

python-3.x - 从RabbitMQ获取消息而不消耗

python - 许多独立的伪随机图,每个图对于任何输入 x 都具有相同的任意 y

Python多个类调用特定类时出错

python - 序号 242 无法定位到动态链接库 Anaconda3\Library\bin\mkl_intel_thread.dll

python - 如何安装Python 3.4及以上版本的日历模块?

python - 如果键与今天的日期匹配,则在 python 中打印值字段

python - 如何通过 Python 子进程杀死 omxplayer

Python:根据季度数计算月份、季度详细信息