Python Asyncio-在字典内调用函数时不节省时间
我试图使用asyncio来节省处理字典值的时间,但我没有节省任何时间Python Asyncio-在字典内调用函数时不节省时间,python,time,python-asyncio,Python,Time,Python Asyncio,我试图使用asyncio来节省处理字典值的时间,但我没有节省任何时间 import asyncio import time async def get_time(t): await asyncio.sleep(t) return str(t) async def ff(): f = dict( d=await get_time(2), e=await get_time(2), f=await get_time(2),
import asyncio
import time
async def get_time(t):
await asyncio.sleep(t)
return str(t)
async def ff():
f = dict(
d=await get_time(2),
e=await get_time(2),
f=await get_time(2),
g=await get_time(2),
h=await get_time(2),
i=await get_time(2),
)
print(f)
t0 = time.time()
asyncio.run(ff())
print(time.time()-t0)
输出:
12.008311986923218
由于我希望代码异步运行,因此预期的输出时间不足2秒。等待协同路由()
等待协同路由完成,然后才继续。尽管出现了这样的情况,但在dict构造函数的多个参数中调用await
与按顺序调用它们无异,因此您的ff
函数也可以按如下方式编写,其含义完全相同:
async def ff():
# get_time() executed in sequence
_d = await get_time(2)
_e = await get_time(2)
_f = await get_time(2)
_g = await get_time(2)
_h = await get_time(2)
_i = await get_time(2)
f = dict(d=_d, e=_e, f=_f, g=_g, h=_h, i=_i)
print(f)
您要做的是将get_time()
的所有实例提交到事件循环,然后等待它们完成,收集结果。这可以通过在每个get\u time()
上调用asyncio.create\u task()
来完成,或者通过调用asyncio.gather()
来完成,这正是为此而设计的。例如:
async def ff():
# get_time() executed in parallel
d, e, f, g, h, i = await asyncio.gather(
get_time(2),
get_time(2),
get_time(2),
get_time(2),
get_time(2),
get_time(2),
)
f = dict(d=d, e=e, f=f, g=g, h=h, i=i)
print(f)
wait coroutine()
等待coroutine完成,然后再继续。尽管出现了这样的情况,但在dict构造函数的多个参数中调用await
与按顺序调用它们无异,因此您的ff
函数也可以按如下方式编写,其含义完全相同:
async def ff():
# get_time() executed in sequence
_d = await get_time(2)
_e = await get_time(2)
_f = await get_time(2)
_g = await get_time(2)
_h = await get_time(2)
_i = await get_time(2)
f = dict(d=_d, e=_e, f=_f, g=_g, h=_h, i=_i)
print(f)
您要做的是将get_time()
的所有实例提交到事件循环,然后等待它们完成,收集结果。这可以通过在每个get\u time()
上调用asyncio.create\u task()
来完成,或者通过调用asyncio.gather()
来完成,这正是为此而设计的。例如:
async def ff():
# get_time() executed in parallel
d, e, f, g, h, i = await asyncio.gather(
get_time(2),
get_time(2),
get_time(2),
get_time(2),
get_time(2),
get_time(2),
)
f = dict(d=d, e=e, f=f, g=g, h=h, i=i)
print(f)