我有这个程序
import time
import asyncio
def is_prime(x):
return not any(x//i == x/i for i in range(x-1, 1, -1))
async def highest_prime_below(x):
print('Highest prime below %d' % x)
for y in range(x-1, 0, -1):
if is_prime(y):
print('→ Highest prime below %d is %d' % (x, y))
return y
await asyncio.sleep(0.01)
return None
async def main():
t0 = time.time()
await asyncio.wait( [
highest_prime_below(100000),
highest_prime_below(10000),
highest_prime_below(1000)
] )
t1 = time.time()
print('Took %.2f ms' % (1000*(t1-t0)))
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
#loop.close()
发现素数的。您也可以在这里https://osf.io/w8u26/
看到它我的问题是,可以说我有太多的函数调用
await asyncio.wait( [
highest_prime_below(100000),
highest_prime_below(10000),
highest_prime_below(1000)
#100 function calls here
] )
而且我只有异步睡眠这么多await asyncio.sleep(0.01)
所有功能都必须在设定的时间内完成,还是在睡眠时间过后某些功能会被撤消?。
答案 0 :(得分:1)
所有功能都必须在设定的时间内完成,还是在睡眠时间过后某些功能会被撤消?。
您的睡眠时间无关紧要; await asyncio.sleep()
在这里的唯一作用是强制asyncio暂停事件循环的执行,并给其他任务一个运行的机会。您可能还会等待asyncio.sleep(0)
,然后achieve the same effect。
换句话说:不,函数的运行时间与休眠中指定的时间没有任何关系。只要您使用asyncio.wait()
等待所有协程,它们就会在wait()
返回时全部完成。增加睡眠时间只会使它们运行更长的时间。
答案 1 :(得分:0)
此脚本的CPU绑定比io绑定更多。您是否考虑过通过线程实现并发?如果必须调用数百个这些函数,则将看到巨大的改进。