目錄
簡單的使用
相同和同步的對比
順下載的例子
1.簡單的使用
import asyncio
async def req1():
await asyncio.sleep(1)
print('執行 req1')
return 1
async def req2():
print('執行 req2')
return 2
async def main():
list = [req1(), req2()]
res = await asyncio.gather(*list)
'''
雖然,req2是先執行完的,
但是res返回值的順序, 還是跟list順序保持一致
'''
print(res)
asyncio.get_event_loop().run_until_complete(main())
'''
結果:
執行 req2
執行 req1
[1, 2]
'''
2.相似和同時的對比
測試2個請求,同時觸發請求執行的時間短,我是延遲讓請求延遲返回
import asyncio
import time
import requests
from aiohttp import ClientSession
async def fetch(session, param):
async with session.get as resp:
data = await resp.json()
return data
async def req_async():
async with ClientSession() as session:
return await asyncio.gather(fetch(session, 2), \
fetch(session, 1))
def req():
session = requests.Session()
p1, p2 = 2, 1
return [
session.get.json(),
session.get.json()
]
async def main():
s1 = time.time()
v1 = await req_async()
s2 = time.time()
v2 = req()
print(f'異步請求時間:{round(s2-s1,1)}s \
響應結果:{[v["args"]["a"] for v in v1]}')
print(f'同步請求時間:{round(time.time()-s2,1)}s \
響應結果:{[v["args"]["a"] for v in v2]}')
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
'''
結果:
異步請求時間:3.2s 響應結果:['2', '1']
同步請求時間:7.9s 響應結果:['2', '1']
'''
3.相關下載的例子
看似請求、極大的文件限制、意外保存
async def download(sem, page: int, folder: str, session: ClientSession):
async with sem:
async with session.get(url, params={'page': page}) as resp:
async with aiofiles.open(f'{folder}/{page}.json', mode='w') as f:
await f.write(await resp.text())
return page
async def main():
# 請求url參數列表
url_pages = range(1, 5)
# 創建文件夾data
folder_name = 'data'
if not os.path.exists(folder_name):
os.makedirs(folder_name)
# 限制并發數量
sem = asyncio.Semaphore(50)
# 異步請求,并保存到文件
async with ClientSession(connector=TCPConnector(limit=5),
timeout=ClientTimeout(300)) as session:
tasks = []
for page in url_pages:
tasks.append(download(sem, page, folder_name, session))
result = await asyncio.gather(*tasks)
exp = set(url_pages)
act = set(result)
if exp == act:
print(f'全部下載完成')
else:
print(f'未成功:{exp - act},成功:{exp & act}')
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
審核編輯:劉清
-
python
+關注
關注
56文章
4807瀏覽量
85039
發布評論請先 登錄
相關推薦
深度學習入門:簡單神經網絡的構建與實現
使用Python實現xgboost教程
華為云 Flexus X 實例下的場景體驗——小企業使用 Python 語言——超迅速搭建簡單公網 API 接口服務
![華為云 Flexus X 實例下的場景體驗——小企業使用 <b class='flag-5'>Python</b> 語言——超迅速搭建<b class='flag-5'>簡單</b>公網 API 接口服務](https://file1.elecfans.com//web3/M00/03/FF/wKgZPGduPxSAQnMwAAN1IZska7A555.png)
使用Python進行串口通信的案例
使用TMS320C6416協處理器:Turbo協處理器(TCP)
![使用TMS320C6416<b class='flag-5'>協</b>處理器:Turbo<b class='flag-5'>協</b>處理器(TCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用TMS320C6416協處理器:Viterbi協處理器(VCP)
![使用TMS320C6416<b class='flag-5'>協</b>處理器:Viterbi<b class='flag-5'>協</b>處理器(VCP)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
第二屆大會回顧第25期 | OpenHarmony上的Python設備應用開發
![第二屆大會回顧第25期 | OpenHarmony上的<b class='flag-5'>Python</b>設備應用開發](https://file1.elecfans.com/web2/M00/04/4E/wKgZombNTbKAGXSVAAARd6jESHY243.jpg)
pytorch和python的關系是什么
Python建模算法與應用
opencv-python和opencv一樣嗎
用pycharm進行python爬蟲的步驟
tensorflow簡單的模型訓練
鴻蒙輕內核源碼分析:MMU 協處理器
![鴻蒙輕內核源碼分析:MMU <b class='flag-5'>協</b>處理器](https://file1.elecfans.com/web2/M00/C0/48/wKgZomXURhaAGcYoAAMU1aaKtPg526.png)
評論