我们先写一个flask小程序
demo.py
from flask import Flask
import time
app = Flask(__name__)
@app.route('/')
def index():
time.sleep(3)
return 'Hello!'
@app.route('/tests')
def tests():
time.sleep(3)
return 'Hello tests!'
if __name__ == '__main__':
app.run(threaded=True) # 这表明 Flask 启动了多线程模式,不然默认是只有一个线程的。
然后我们写个请求的文件
import asyncio
import aiohttp
import time
from concurrent.futures import ProcessPoolExecutor
start = time.time()
async def gets(url):
session = aiohttp.ClientSession()
response = await session.get(url)
result = await response.text()
await session.close()
return result
async def requestindexs():
url = 'http://127.0.0.1:5000'
print('go go go ',url)
result = await gets(url)
print('Get response from',url,'Result:',result)
async def requesttests():
url = 'http://127.0.0.1:5000/tests'
print('go go go ',url)
result = await gets(url)
print('Get response from',url,'Result:',result)
def main():
tasks = [] # 我们要把所有的任务都注册到tasks中,建议最多500
# for _ in range(200):
# index = asyncio.ensure_future(requestindexs())
# tests = asyncio.ensure_future(requesttests())
# tasks.append(index)
# tasks.append(tests)
index = [tasks.append(asyncio.ensure_future(requestindexs())) for _ in range(200)]
tests = [tasks.append(asyncio.ensure_future(requesttests())) for _ in range(200)]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
if __name__ == '__main__':
main()
end = time.time()
print('Cost time:', end - start)