FastAPI之阻塞式io和非阻塞式io

刘清政發表於2024-07-05
import time
import asyncio
from fastapi import FastAPI

app = FastAPI()

'''
併發兩個請求:阻塞式io,uvicorn開啟的一個執行緒無法同時執行兩個請求,只能一個完成再執行另一個
請求1:
    hello
    bye
請求2:
    hello
    bye
'''
@app.get('/1')
async def t1():
    print('hello')
    time.sleep(5)
    print('bye')

'''
併發兩個請求:非阻塞式io,uvicorn開啟的一個執行緒遇到非阻塞io,協程會切換到另一個請求上執行,出現如下效果
請求1:
    hello
請求2:
    hello
請求1:
    bye
請求2:
    bye
'''
@app.get('/2')
async def t2():
    print('hello')
    await asyncio.sleep(5)
    print('bye')

'''
併發兩個請求:阻塞式io,使用的是def,會開啟兩個執行緒執行檢視函式,所以會出現如下效果
請求1:
    hello
請求2:
    hello
請求1:
    bye
請求2:
    bye
'''
@app.get('/3')
def t3():
    print('hello')
    time.sleep(5)
    print('bye2')
    
'''


'''

相關文章