日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python中使用多線程改進flask案例_python

作者:kuokay ? 更新時間: 2022-05-04 編程語言

前言:

線程是指進程內的一個執行單元,也是進程內的可調度實體.

與進程的區別:

  • (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/")
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()

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

欄目分類
最近更新