hand
_1_5_49
4
返回栏目
1k
9k
1k
1k
5k
1k
1k
1k
1k
3k
2k
1k
0.8k
2k
3k
1k
1k
0.7k
0.9k
1k
0.6k
0.4k
0.4k
0.3k
3k
2k
9k
0.4k
0.4k
0.8k
0.5k
3k
5k
1k
2k
2k
3k
5k
1k
1k
0.4k
0.5k
0.4k
0.6k
0.7k
1k
0.4k
0.3k
4k
0.5k
0k
0.3k
0k
0.2k
0.2k
0.3k
0.9k
0.9k
0.1k
0.9k
0.9k
1k
0.5k
6k
0.3k
0.4k
0.7k
0.6k
8k
3k
1k
1k
1k
1k
0k
2k
1k
1k
0.2k
5k
4k
5k
0.4k
0.8k
1k
1k
1k
0.1k
2k
1k
2k
6k
0k
2k
7k
1k
5k
2k
3k
1k
0k
1k
0.9k
0.4k
0.2k
1k
3k
4k
1k
1k
1k
2k
3k
0.7k
0.3k
0.5k
0.6k
1k
0.9k
3k
0.3k
4k
返回python栏目
作者:
贺及楼
成为作者
更新日期:2024-10-27 18:06:26
Python 的 asyncio
库是用于编写单线程并发代码的库,使用 async/await
语法。它支持异步I/O、事件循环、协程和任务。asyncio
使得可以在单线程内高效执行并发操作,特别适用于I/O密集型和高级别的结构化网络代码。它简化了异步编程模型,提高了程序性能和响应速度,是实现异步编程的关键工具。
python3.4就有asyncio,python3.5用async,await关键字
import time
import asyncio
# 定义异步函数
async def hello():
await asyncio.sleep(1)
print(time.time())
def run():
for i in range(5):
loop.run_until_complete(hello())
loop = asyncio.get_event_loop()
if __name__ =='__main__':
run()
1527595104.8338501
1527595104.8338501
1527595104.8338501
1527595104.8338501
1527595104.8338501
async def 用来定义异步函数,其内部有异步操作。
每个线程有一个事件循环,主线程调用asyncio.get_event_loop()时会创建事件循环
你需要把异步的任务丢给这个循环的run_until_complete()方法,事件循环会安排协同程序的执行。
import time
import asyncio
import aiohttp # 用异步方式获取网页内容
urls = ['https://www.baidu.com'] * 400
async def get_html(url, sem):
async with(sem):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
html = await resp.text()
def main():
loop = asyncio.get_event_loop() # 获取事件循环
sem = asyncio.Semaphore(10) # 控制并发的数量
tasks = [get_html(url, sem) for url in urls] # 把所有任务放到一个列表中
loop.run_until_complete(asyncio.wait(tasks)) # 激活协程
loop.close() # 关闭事件循环
if __name__ == '__main__':
start = time.time()
main()
print(time.time()-start) # 5.03s
html = await xxx
html可以获得参数
python
整章节共122节
快分享给你的小伙伴吧 ~