并发编程(十)在Flask服务中使用进程池加速

并发编程专栏系列博客

并发编程(一)python并发编程简介

并发编程(二)怎样选择多线程多进程和多协程

并发编程(三)Python编程慢的罪魁祸首。全局解释器锁GIL

并发编程(四)如何使用多线程,使用多线程对爬虫程序进行修改及比较

并发编程(五)python实现生产者消费者模式多线程爬虫

并发编程(六)线程安全问题以及lock解决方案

并发编程(七)好用的线程池ThreadPoolExecutor

并发编程(八)在web服务中使用线程池加速

并发编程(九)使用多进程multiprocessing加速程序运行

并发编程(十)在Flask服务中使用进程池加速

并发编程(十一)python异步IO实现并发编程

并发编程(十二)使用subprocess启动电脑任意程序(听歌、解压缩、自动下载等等)

 
 

# -*- coding: utf-8 -*-
# @Time    : 2021-03-22 16:35:26
# @Author  : wlq
# @FileName: flask_process_pool.py
# @Email   :[email protected]

import flask
import math
import json
from concurrent.futures import ProcessPoolExecutor

process_pool = ProcessPoolExecutor()
app = flask.Flask(__name__)


# 判断是否是素数
def is_prime(n):
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    sqrt_n = int(math.floor(math.sqrt(n)))

    for i in range(3, sqrt_n + 1, 2):
        if n % i == 0:
            return False
    return True


@app.route("/is_prime/<numbers>")
def api_is_prime(numbers):
    number_list = [int(x) for x in numbers.split(",")]

    rsts = process_pool.map(is_prime, number_list)

    rst = json.dumps(
        dict(zip(number_list, rsts))
    )

    return rst


if __name__ == '__main__':
    app.run()

结果:
在这里插入图片描述

如有疑问,可以参考该系列前面几个博客内容。