Python asyncio高性能异步编程 详解
import asyncio
async def count_primes(nums):
"""
异步计算一个范围内的素数个数
"""
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
primes = [prime for num in nums if await asyncio.get_event_loop().run_in_executor(None, is_prime, num) for prime in [num] if is_prime(num)]
return len(primes)
async def main():
# 测试代码
nums = range(2, 30000) # 示例范围
prime_count = await count_primes(nums)
print(f'There are {prime_count} primes in the range {nums}.')
# 运行事件循环
asyncio.run(main())
这段代码使用了asyncio
库中的run_in_executor
函数,将密集型的计算移到了进程池中,避免了阻塞事件循环。它定义了一个异步函数count_primes
来计算给定范围内的素数,并在主函数main
中测试这个功能。最后,使用asyncio.run
来启动事件循环并运行主函数。
评论已关闭