脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python中使用多线程改进flask案例

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

2022-10-23 14:57kuokay Python

这篇文章主要介绍了使用多线程改进flask案例,线程是指进程内的一个执行单元,也是进程内的可调度实体.线程的划分尺度小于进程,使得多线程程序的并发性高,更多具体内容,需要的小伙伴可以参考下面文章相关资料,希望对你

前言:

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

与进程的区别:

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

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

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

1.线程和进程关系?

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

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

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

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

2.多线程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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.多进程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_45066628/article/details/123082471

延伸 · 阅读

精彩推荐
  • PythonDjango+Bootstrap实现计算器的示例代码

    Django+Bootstrap实现计算器的示例代码

    本文主要介绍了Django+Bootstrap实现计算器的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小旺不正经5782022-02-25
  • Pythonpython 读取以空格分开的文件操作

    python 读取以空格分开的文件操作

    这篇文章主要介绍了python 读取以空格分开的文件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    脚本之家7842021-10-11
  • Pythonpython selenium 对浏览器标签页进行关闭和切换的方法

    python selenium 对浏览器标签页进行关闭和切换的方法

    今天小编就为大家分享一篇python selenium 对浏览器标签页进行关闭和切换的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    爱唱歌de小青蛙14282021-02-22
  • Pythonpython os.path模块常用方法实例详解

    python os.path模块常用方法实例详解

    os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法。感兴趣的朋友跟随小编一起看看吧 ...

    沐沐牡5492021-04-02
  • Python解决Python中的modf()函数取小数部分不准确问题

    解决Python中的modf()函数取小数部分不准确问题

    这篇文章主要介绍了解决Python中的modf()函数取小数部分不准确问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐...

    可乐味的鼻涕5502021-11-16
  • PythonPython中static相关知识小结

    Python中static相关知识小结

    static用法:是一个修饰符,用于修饰成员(成员变量,成员函数).当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调...

    张学程7112020-12-30
  • PythonPython 内置函数memoryview(obj)的具体用法

    Python 内置函数memoryview(obj)的具体用法

    本篇文章主要介绍了Python 内置函数memoryview(obj)的具体用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    十月狐狸5572020-12-09
  • PythonPython技巧之变长和定长序列拆分

    Python技巧之变长和定长序列拆分

    这篇文章主要给大家分享的是Python技巧之变长和定长序列拆分,Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组、列...

    Orion's Blog9002022-03-13