TL;DR: 我想创建asyncio task/coroutine,并获取要在var中分配的返回值
-
我发现了这个问题Getting values from functions that run as asyncio tasks 这似乎是在谈论一个类似的问题,但sintax在asyncio模块中发生了很大的变化,我甚至不确定它是否相关。[我在使用python3.7.2]
为我解释我要做什么的示例代码:
async def s(f):
func = {
1: op1,
2: op2,
3: op3
}.get(f,False)
var = func(f)
return var
def op1(f):
print('Op1',f+f)
return f+f
def op2(f):
print('Op2', f*f)
return f*f
def op3(f):
print('Op3', f**f)
return f**f
async def main():
task1 = asyncio.create_task(s(1))
task2 = asyncio.create_task(s(3))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(task1,task2)
print(f"finished at {time.strftime('%X')}")
main()是docshttps://docs.python.org/3/library/asyncio-task.html#coroutines中的一个协同程序示例
s()应该是一个开关,它将为场景选择适当的函数(op1、op2、op3中的一个),运行函数并返回分配给task1/task2的结果(我预期的结果)。在
实际分配给task1/task2的是:
^{pr2}$如您所见,返回存储在'result'(属性?变量?)但没有直接分配给var
我需要一种方法:将返回值直接赋给var或者一种访问“result”的方法,并将其分配给一个可以进一步操作的var。在
顺便说一句:print(task1.result)
返回:
<built-in method result of _asyncio.Task object at 0x0000028592DDA048>
是一种方法。我更喜欢这样,因为它使等待任务更像普通的函数调用,但也相当于
^{pr2}$您刚刚错过了
()
,因为结果是一个方法,而不是成员变量。在相关问题 更多 >
编程相关推荐