這裡給出一個例子.可自由發揮.
也可以直接使用aiofiles , 其實跟下面執行的代碼差不多的. aiofiles 也是用線程池解決問題
#寫入檔案的函數. 用線程池解決
def save_file(fd , data):
fd.write(data)
async def fetch_files(session:aiohttp.ClientSession,url:str,path:str):
#打開檔案
fd = open(path, 'wb')
#擷取loop
lp = asyncio.get_event_loop()
#擷取響應
async with session.get(url) as resp:
while True:
#異步等待結果 , Chunk_size 每個分片大小
data = await resp.content.read(CHUNK_SIZE)
if not data:
break
#等待寫入,線上程池中寫入
# run_in_executor 傳回一個future,是以可等待
await lp.run_in_executor(None,save_file,fd,data)
fd.close()