python中使用多线程改进flask案例

目录
  • 1.线程和进程关系?
  • 2.多线程
  • 3.多进程

前言:

线程是指进程内的一个执行单元,也是进程内的可调度实体.

与进程的区别:

  • (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
  • (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
  • (3) 线程是处理器调度的基本单位,但进程不是.
  • (4) 二者均可并发执行.

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

1.线程和进程关系?

​ 进程就是一个应用程序在处理机上的一次执行过程,它是一个动态的概念,而线程是进程中的一部分,进程包含多个线程在运行。

​ 多线程可以共享全局变量,多进程不能。多线程中,所有子线程的进程号相同;多进程中,不同的子进程进程号不同。

​ 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
​ 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.
​ 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

下面来介绍具体的多线程改进flask项目案例!!!

2.多线程

import flask
import json
import time
from concurrent.futures import ThreadPoolExecutor

app = flask.Flask(__name__)
pool = ThreadPoolExecutor()

def read_file():
    time.sleep(0.1)
    return "file result"

def read_db():
    time.sleep(0.2)
    return "db result"

def read_api():
    time.sleep(0.3)
    return "api result"

@app.route("/")
def index():
    result_file = pool.submit(read_file)
    result_db = pool.submit(read_db)
    result_api = pool.submit(read_api)

    return json.dumps({
        "result_file": result_file.result(),
        "result_db": result_db.result(),
        "result_api": result_api.result(),
    })

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

3.多进程

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

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(",")]
    results = process_pool.map(is_prime, number_list)
    return json.dumps(dict(zip(number_list, results)))

if __name__ == "__main__":
    process_pool = ProcessPoolExecutor()
    app.run()

到此这篇关于使用多线程改进flask案例的文章就介绍到这了,更多相关多线程改进flask内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 浅谈Python flask框架

    目录 1. flask 框架概述 1.1flask 框架优势 1.2flask 框架获取 1.3flask 框架使用 2. flask demo步骤 3. flask 基础功能 3.1路由功能 3.2模版提供 4.总结  前言: Python 面向对象的高级编程语言,以其语法简单.免费开源.免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析.人工智能.web后端等应用场景上. Python 目前主要流行的web框架:flask.Django.Tornad

  • flask开启多线程的具体方法

    在我之前解释了flask如何支持多线程主要通过两个类来实现,LocalStack和Local,在Local中有两个属性,__storage__和__ident_func__,后者用来获取线程id,从而区分不同线程发来的请求 这次要说的是flask如何开启多线程 先从app.run()这个方法看起 def run(self, host=None, port=None, debug=None, **options): from werkzeug.serving import run_simple i

  • Python Flask入门

    目录 主页 分析代码: 修改视图函数返回值 修改 URL 规则 修改视图函数名 总结 追溯到最初,Flask 诞生于 Armin Ronacher 在 2010 年愚人节开的一个玩笑.后来,它逐渐发展成为一个成熟的 Python Web 框架,越来越受到开发者的喜爱. Flask 是典型的微框架,作为 Web 框架来说,它仅保留了核心功能:请求响应处理和模板渲染.这两类功能分别由 Werkzeug(WSGI 工具库)完成和 Jinja(模板渲染库)完成. 主页 主页的 URL 一般就是根地址,即

  • Keras多线程机制与flask多线程冲突的解决方案

    在使用flask部署Keras,tensorflow等框架时候,经常出现 FailedPreconditionError: Attempting to use uninitialized value batchnormalization_ 或者 Tensor Tensor("crf_1/cond/Merge:0", shape=(?, ?, 260), dtype=float32) is not an element of this graph. 使用keras.backend.cle

  • Python+Flask编写一个简单的行人检测API

    目录 前提条件 实验环境 项目结构 主要代码 运行结果 前提条件 1.了解Python语言,并会安装第三方库 2.了解Python Web Flask框架 3.了解PyTorch深度学习框架 实验环境 Python 3.6.2 PyTorch 1.7.1 Flask 1.1.1 Numpy 1.18.5 Opencv 3.4.2 PIL pip3 install pillow 项目结构 相关说明: static:用于存储静态文件,比如css.js和图片等 templates:存放模板文件 upl

  • Python中的flask框架详解

    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务.本文参考自Flask官方文档,大部分代码引用自官方文档. 安装flask 首先我们来安装Flask.最简单的办法就是使用pip. pip install flask 然后打开一个Python文件,输入下面的内容并运行该文件.然后访问localhost:5000,我们应当可以看到浏览器上输出了hello world. from flask import Flask app = Flask(

  • python中使用多线程改进flask案例

    目录 1.线程和进程关系? 2.多线程 3.多进程 前言: 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3) 线程是处理器调度的基本单位,但进程不是. (4) 二者均可并发执行. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程

  • Python中的多线程实例(简单易懂)

    目录 1.python中显示当前线程信息的属性和方法 2.添加一个线程 3.线程中的join函数 4.使用Queue存储线程的结果 5.线程锁lock 前言: 多线程简单理解就是:一个CPU,也就是单核,将时间切成一片一片的,CPU轮转着去处理一件一件的事情,到了规定的时间片就处理下一件事情. 1.python中显示当前线程信息的属性和方法 # coding:utf-8 # 导入threading包 import threading if __name__ == "__main__":

  • python中的多线程实例教程

    本文以实例形式较为详细的讲述了Python中多线程的用法,在Python程序设计中有着比较广泛的应用.分享给大家供大家参考之用.具体分析如下: python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代

  • Python 中闭包与装饰器案例详解

    项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 1.Python中一切皆对象 这恐怕是学习Python最有用的一句话.想必你已经知道Python中的list, tuple, dict等内置数据结构,当你执行: alist = [1, 2, 3] 时,你就创建了一个列表对象,并且用alist这个变量引用它: 当然你也可以自己定义一个类: class House(object): def __init__(self, are

  • Python中的tkinter库简单案例详解

    目录 案例一 Label & Button 标签和按钮 案例二 Entry & Text 输入和文本框 案例三 Listbox 部件 案例四 Radiobutton 选择按钮 案例五 Scale 尺度 案例六 Checkbutton 勾选项 案例七 Canvas 画布 案例八 Menubar 菜单 案例九 Frame 框架 案例十 messagebox 弹窗 案例十一 pack grid place 放置 登录窗口 TKinterPython 的 GUI 库非常多,之所以选择 Tkinte

  • 详解Python中的多线程编程

    一.简介 多线程编程技术可以实现代码并行性,优化处理能力,同时功能的更小划分可以使代码的可重用性更好.Python中threading和Queue模块可以用来实现多线程编程. 二.详解 1.线程和进程        进程(有时被称为重量级进程)是程序的一次执行.每个进程都有自己的地址空间.内存.数据栈以及其它记录其运行轨迹的辅助数据.操作系统管理在其上运行的所有进程,并为这些进程公平地分配时间.进程也可以通过fork和spawn操作来完成其它的任务,不过各个进程有自己的内存空间.数据栈等,所以只

  • Python中使用Frozenset对象的案例详解

    目录 关于Frozensets 创建一个新的Frozenset对象 一旦创建了Frozenset,你就不能修改它了 与 Frozensets 一起使用的方法 Frozenset可以被转换为其他可迭代类型 Frozenset使用案例 总结 这篇文章将介绍在Python中使用 "frozenset "函数的指南,该函数返回一个新的frozenset类型的Python对象.这些对象类似于Python中的set对象,但有一些关键的区别.本文的所有代码样本都是在Ubuntu 21.04上用Pyt

  • Python中的多线程

    什么是多线程: 进程:正在运行的程序,QQ 360 ...... 线程:就是进程中一条执行程序的执行路径,一个程序至少有一条执行路径.(360中的杀毒 电脑体检 电脑清理 同时运行的话就需要开启多条路径) 每个线程都有自己需要运行的内容,而这些内容可以称为线程要执行的任务. 开启多线程是为了同时运行多部分代码. 好处:解决了多部分需要同时运行的问题 弊端:如果线程过多,会导致效率很低(因为程序的执行都是CPU做着随机 快速切换来完成的) 线程与进程的区别 线程共享内存,进程独立内存 线程启动速度

  • Python中尝试多线程编程的一个简明例子

    综述     多线程是程序设计中的一个重要方面,尤其是在服务器Deamon程序方面.无论何种系统,线程调度的开销都比传统的进程要快得多.   Python可以方便地支持多线程.可以快速创建线程.互斥锁.信号量等等元素,支持线程读写同步互斥.美中不足的是,Python的运行在Python 虚拟机上,创建的多线程可能是虚拟的线程,需要由Python虚拟机来轮询调度,这大大降低了Python多线程的可用性.希望高版本的Python可以 解决这个问题,发挥多CPU的最大效率.   网上有些朋友说要获得真

  • python中的多线程锁lock=threading.Lock()使用方式

    目录 多线程锁lock=threading.Lock()使用 疑问 解决方法 例子 python多线程中锁的概念 锁可以独立提取出来 概念 线程不安全 线程锁 多线程锁lock=threading.Lock()使用 疑问 多线程任务是同时执行的,如果我们需要先执行线程a,再执行线程b,需要怎么办呢? 解决方法 使用python的多线程锁lock. 例子 未使用多线程锁lock: def a():     for i in range(3):         print('a%d' % (i +

随机推荐