python3 asyncio 高性能異步爬蟲

直接寫個小列子吧

import asyncio
import aiohttp
import requests
import time

start = time.time()
async def gets(url):
    # conn = aiohttp.TCPConnector()
    session = aiohttp.ClientSession()
    response = await session.get(url)
    result = await response.text()
    await session.close()   #這裏註明一下,如果不關閉的話,會出現警告
    return result

async def request():
    url = 'http://127.0.0.1:5000'
    print('go go go ',url)
    result = await gets(url)

    print('Get response from',url,'Result:',result)



tasks = [asyncio.ensure_future(request()) for _ in range(5)]
loop  = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()
print('Cost time:', end - start)

用flask啓動一個

from flask import Flask
import time

app = Flask(__name__)


@app.route('/')
def index():
    time.sleep(3)
    return 'Hello!'


if __name__ == '__main__':
    app.run(threaded=True)  # 這表明 Flask 啓動了多線程模式,不然默認是隻有一個線程的。

不關閉上面的session的話,警告就是這樣的

Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x10bb31690>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章