深度學習多執行緒部署 學習筆記

2021-09-27 07:14:21 字數 3440 閱讀 2346

flask

gunicorn 部署flask專案

分布式更多的乙個概念,是為了解決單個物理伺服器容量和效能瓶頸問題而採用的優化手段。

該領域需要解決的問題在不同的技術層面上,又包括:分布式檔案系統、分布式快取、分布式資料庫、分布式計算等,一些名詞hadoop、zookeeper、mq等都跟分布式有關。

從理念上講,分布式的實現有兩種形式:

高併發可以通過分布式技術去解決,將併發流量分到不同的物理伺服器上。

但除此之外,還可以有很多其他優化手段:比如使用快取系統,將所有的嗎,靜態內容放到cdna等;還可以使用多執行緒技術將一台伺服器的伺服器能量最大化。

在這個『雲』的時代,提高分布式系統併發能力的方式,方**上主要有兩種:垂直擴充套件(scale up)與水平擴充套件(scale out)。

水平擴充套件,只要增加伺服器數量,就能線性擴充系統效能。虛擬化技術的出現,讓水平擴充套件變得輕鬆且簡單。現在的雲主機幾乎是虛擬機器,而不是物理主機。這樣的話,線性擴充也是分分鐘的事,前提是有足夠的物理主機支撐。

高併發的三個經典問題:

多執行緒是指從軟體或者硬體上實現多個執行緒併發執行的技術,它更多的是解決cpu排程多個程序的問題,從而讓這些程序看上去是同時執行(實際是交替執行的)。

在這幾個概念中,多執行緒解決的問題是最明確的,手段也是比較單一的,基本上遇到的最大問題就是執行緒安全。

使用flask自帶的伺服器,可以完成web服務的啟動。在生產環境中flask自帶的伺服器,無法滿足效能需求,需要採用gunicorn做wsgi容器,來部署flask程式。gunicorn(綠色獨角獸)是乙個python wsgi的http伺服器。從ruby的獨角獸(unicorn)專案移植。該gunicorn伺服器與各種web框架相容,實現非常簡單,輕量級的資源消耗。

wsgi(web server gateway inte***ce)web伺服器閘道器介面,是一種規範,它是web伺服器和web應用程式之間的介面。它的作用就像是橋梁,連線在web伺服器和web應用框架之間。

gunicorn是基於pre-fork模型的,有乙個中心管理程序(master process)用來管理worker程序集合。master從不知道任何關於客戶端的資訊。所有的請求和響應處理都是由worker程序來處理的。

主程式是乙個簡單的迴圈,監聽各種訊號以及相應的響應程序。master管理著正在執行的worker集合,通過監聽各種訊號比如ttin,ttou和chld。ttin和ttou響應的增加和減少worker的數目。chld訊號表明乙個子程序已經結束了,在這種情況下master會自動的重啟失敗的worker。

gunicorn實現了乙個unix的預分發web的服務端。

為了提高使用gunicorn時的效能,需理解3種併發方式。

pip3  install gunicorn --user
檢視程式是否執行起來,如果執行起來會有兩個程序

fuser -v -n tcp 埠號
結束程序

kill -

9 程序號

# coding=utf-8

# /usr/bin/env python

"""author: buty

date: 2019/9/17 下午1:36

description: gunicorn config

"""import gevent.monkey

gevent.monkey.patch_all()

import multiprocessing

#server socket

bind = '0.0.0.0:4000'

#worker

# workers = multiprocessing.cpu_count() * 2 + 1

workers = 4

threads = 1

# worker_class = 'gunicorn.workers.ggevent.geventworker'

# worker_class = 'gthread'#gevent

worker_class = 'sync'

debug = true

# daemon = true

worker_connections = 100

#log

pidfile = 'log/gunicorn.pid'

accesslog = 'log/gunicorn_access.log'

# errorlog = 'log/gunicorn_error.log'

loglevel = 'debug'

access_log_format = '%(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

# 新增配置檔案後的啟動方式
pstree -ap|grep gunicorn
最小的一級是worker程序,它們的上一級是gunicorn程序。使用kill -hup [gunicorn 程序id]可以殺掉程序。如果該程序還存在上一級程序,使用kill -9 [程序id]將其徹底關閉。

報告總體分為dashboard和charts兩部分

dashboard

request summary:請求的通過率(ok)與失敗率(ko),百分比顯示。

statistics:資料分析,基本將summary report和aggregate report的結果合併。

errors: 錯誤情況,依據不同的錯誤型別,將所有錯誤結果展示。

top 5 errors by sampler:top5錯誤資訊取樣。

chart分為三大模組:時間維度資訊(over time)、吞吐量(throughput)、響應時間(response times)。

多執行緒學習筆記 執行緒

thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...

多執行緒學習筆記

多執行緒的相關概念 什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的...

多執行緒學習筆記

多執行緒是實現多工的一種方式,多個程序多個執行緒。建立執行緒 1.繼承thread類 子類覆蓋父類中的run方法,將執行緒執行的 存放在run中。2.建立子類物件的同時執行緒也被建立。3.通過呼叫start方法開啟執行緒。執行緒的各種狀態 1.建立狀態 在程式中用構造方法建立了乙個執行緒物件後,新的...