从作为异步任务运行的函数中获取值 [英] Getting values from functions that run as asyncio tasks
本文介绍了从作为异步任务运行的函数中获取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试以下代码:
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()
我不知道如何从这些函数中获取变量中的值.我不能这样做:
I can't figure out how to get values in variables from these functions. I can't do this:
asyncio.async(a = func_infinite())
因为这会使它成为关键字参数.我该如何完成这项工作?
as this would make this a keyword argument. How do I go about accomplishing this?
推荐答案
协程按原样工作.只需使用 loop.run_until_complete()
和 调用asyncio.gather()
收集多个结果:
The coroutines work as is. Just use the returned value from loop.run_until_complete()
and 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
这篇关于从作为异步任务运行的函数中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文