今天繼續給大家介紹Python相關知識,本文主要内容是Python asyncio程式設計之異步與非異步子產品混合異步實作。
一、異步與非異步子產品混合異步程式設計實作方法
我們在使用asyncio子產品進行異步程式設計時,有時會遇到架構中部分子產品不支援協程異步。為了與這樣的子產品進行對接,那麼我們就需要使用線程池的方式來實作異步。這樣一來,相比于使用協程的方式,需要耗費更多的資源。
二、異步與非異步子產品混合異步程式設計實作實戰
異步與非異步子產品混合異步程式設計代碼如下所示:
import requets
import asyncio
async def download_image(url):
print("Downloading......")
loop=asyncio.get_event_loop()
future=loop.run_in_executor(None,requets.get,url)
response=await future
print("OK!")
filename=
with open(filename,"wb") as file_object:
file_object.write(response.content)
url_list=[]
tasks=[download_image(url) for url in url_list]
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
上述代碼中使用的函數作用如下:
1、get_event_loop()
該函數如果在協程中被調用,則會傳回目前的事件循環,如果目前沒有事件循環,則會建立一個事件循環。
2、run_in_executor()
該函數可以在目前的事件循環中添加新的操作。
3、run_until_complete()
該函數可以執行事件循環隊列。
上述代碼執行結果如下所示:
從上圖中可以看出,在使用線程池方式後,成功實作了request子產品(不支援協程的子產品)的異步操作。
原創不易,轉載請說明出處:https://blog.csdn.net/weixin_40228200