MetaGPT异步编程基础

并发是在同一个处理器上,任务交替运行(趁别的任务等待或者IO操作的时候先运行其他任务),某一时刻只有一个任务运行;侧重于资源共享和任务调度,目的是提高系统的响应效率,;
并行是在不同处理器上,任务同时运行来减少总时间,某一时刻可以有多个任务在不同的硬件上运行;侧重于充分利用硬件资源,目的是提高系统的计算性能。
异步指的是一种编程模式,在这种模式下,任务可以独立地执行并且不会阻塞主线程。异步编程常用于I/O操作、事件驱动等场景,可以提高系统的响应能力和资源利用率。异步编程通常需要使用回调函数、事件监听、Future/Promise等异步编程机制。
使用异步编程处理api请求,可以向大模型发送多个查询,不必等待一个查询完成后再发送。可以提高效率,减少等待时间,提高用户交互体验的流畅性。
协程:一个协程遇到 I/O 操作时,它会主动让出控制权,让其他协程得以执行。当 I/O 操作完成时,该协程会被唤醒继续执行,适合于I/O密集型的应用程序,提高并发性能。
异步网络请求:

1 import asyncio #导入 Python 的异步编程库 asyncio,用于创建和管理异步任务。
2 import aiohttp# 导入 aiohttp 库,用于发送 HTTP 请求和获取网页内容。
3 import time
4 async def fetch_url(url):    #: 定义一个名为 fetch_url 的异步函数,
	async with aiohttp.ClientSession() as session:  #async 关键字创建协程,一个 aiohttp 客户端会话,用于发送 HTTP 请求,async with 确保会话在函数退出时自动关闭
	async with session.get(url) as response:   # 使用客户端会话发送一个 GET 请求到指定的 URL,并获取响应对象
	return await response.text() #从响应中读取页面内容,并返回结果。await 关键字暂停协程。
8 async def main():  #定义一个名为 main 的异步函数,作为程序的入口点。
9 		start = time.time()
		urls = ["http://example.com",
10				 "http://example.org", "http://example.net"]
11 		tasks = [fetch_url(url) for url in urls]
12 		pages = await asyncio.gather(*tasks) #处理获取的页面数,使用 asyncio.gather 函数并发地执行所有异步任务,并等待它们全部完成。显著提高速度和吞吐量
		for page in pages:
			print(len(page))
		end = time.time()
		ptrint('running time:%s seconds'%(end-start))
13 		asyncio.run(main()) #启动 main 函数,运行整个异步程序

异步函数库 asyncio 同步函数库 requests

def fetch_url(url):
	reponse = request.get(url)
	return response.test

异步能够同时发起多个网络请求,在等待其中 一个的时候,处理其他请求
同步是每个请求顺序发起,必须等待当前请求完成后才能开始下一个请求

async def square(number:int) ->int:
	return number*number
result = square(10) #返回的是一个协程对象,必须要创建协程事件循环并关闭事件循环
print(result)

result = asyncio.run(square(10)) #asyncio.run() 自动创建协程事件循环并关闭事件循环,是程序的主要入口
print(result)

await +协程对象A:暂停协程的关键字,只在协程内部有效,暂停A协程等待A返回结果

记录时间

time.time() #都是计时,这个受系统时间影响 比如时区从北京调到洛杉矶
time.perf_counter() #不受系统时间影响
await asyncio.sleep(2) #暂停协程等待两秒,这个协程挂起,先去执行其他2秒

asyncio.gather()让多个协程任务并发执行,不用手动创建任务,异常管理、取消任务
xxx = future () 是将来返回值的对象,现在还没有被赋值,可以用xxx.done()查询是否赋值
在异步方法中,顺序调用不代表顺序执行,异步函数返回的是一个异步对象,不会直接执行,添加到asyncio.gather才被调用执行,并发执行这些协程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值