把asyncio.run(main())
改为asyncio.get_event_loop().run_until_complete(main())
。
或者把asyncio.run(asyncio.wait(tasks))
改为asyncio.get_event_loop().run_until_complete(asyncio.wait(tasks))
。
一个例子:
import aiohttp
import logging
import time
import asyncio
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
url = "https://httpbin.org/delay/5" # 延迟5秒钟响应
async def scrape():
timeout = aiohttp.ClientTimeout(total=10) # 设置超时对象
async with aiohttp.ClientSession(timeout=timeout) as session:
async with session.get(url) as res:
logging.info('请求 %s', url)
return await res.text()
async def main():
futures = []
for i in range(1, 11):
# future表示将来执行或没有执行的任务结果,是对task的封装
futures.append(asyncio.ensure_future(scrape()))
await asyncio.gather(*futures) # 并发
start_time = time.time()
# asyncio.run(main())
asyncio.get_event_loop().run_until_complete(main())
end_time = time.time()
logging.info('总共耗时%s', end_time - start_time)