天天看點

多任務協程示例

import asyncio
import time
async def request(url):
    print('正在下載下傳',url)
    # 在異步協程中如果出現了同步子產品相關的代碼,那麼就無法實作異步
    # time.sleep(2)
    # 當在asyncio中遇到阻塞操作必須手動挂起,使用await
    await asyncio.sleep(2)
    print('下載下傳完畢',url)

start = time.time()
urls = [
    'www.baidu.com',
    'www.sogou.com',
    'www.360.com'
]

# 任務清單:存放多個任務對象
stasks = []
for url in urls:
	# 執行個體化三個協程
    c = request(url)
    # 任務,任務是協程真正的執行對象,協程定義計算方法,任務執行該方法
    task = asyncio.ensure_future(c)
    # 加入任務隊列中
    stasks.append(task)

# 執行個體化一個loop    
loop = asyncio.get_event_loop()
# 需要将任務清單封裝到wait中執行
loop.run_until_complete(asyncio.wait(stasks))
print(time.time()-start)
           

繼續閱讀