往期文章:
- 并发编程简介
- 怎样选择多线程多进程多协程
- Python速度慢的罪魁祸首,全局解释器锁GIL
- 使用多线程,Python爬虫被加速10倍
- Python实现生产者消费者爬虫
- Python线程安全问题以及解决方案
- Python好用的线程池ThreadPoolExecutor
- Python使用线程池在Web服务中实现加速
- 使用多进程multiprocessing模块加速程序的运行
使用多进程在FastAPI服务中加速
大部分情况下使用多线程加速就可以了,但是,有些应用是也会遇到cpu密集型的计算。怎么在FastAPI中使用进程池来加速呢?下面通过代码演示方式为大家介绍一下:
from fastapi import FastAPI,Query
import math
app = FastAPI(debug=True)
from concurrent.futures import ProcessPoolExecutor
def is_prime(num):
"""
判断是不是素数
"""
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(num)))
for i in range(3,sqrt_n+1,2):
if num % i == 0:
return False
return True
@app.get("/is_prime/{num_list}")
def api_is_prime(num_list:str=Query(description="判断素数的参数")):
num_list = [int(x) for x in num_list.split(",")]
result = pool.map(is_prime,num_list)
return dict(zip(num_list,result))
if __name__ == "__main__":
import uvicorn
pool = ProcessPoolExecutor()
uvicorn.run(app=app)
注意:
ProcessPoolExecutor
必须放在所以函数的最后面,而且必须在__main__
里面
启动应用:
python 07.fastapi_process_pool.py
测试接口,结果如下: