後臺開發小筆記
單例模式
在應用這個模式時,單例物件的類必須保證只有一個例項存在。
服務程序中的其他物件再通過這個單例物件獲取這些配置資訊。這種方式簡化了在複雜環境下的配置管理。
- __new__實現
- 用裝飾器實現單例模式
普通、靜態方法、類方法
普通方法傳入的第一個引數必須是self(當然也可以不用self,官方要求儘量用self),self是指例項物件本身;
靜態方法無需傳參;
類方法傳入的第一個引數必須是class,是指類本身。
併發
Python的記憶體利用率
使用多執行緒:單核100% 雙核不到50% 四核不到30%,涉及到叫GIL(全域性直譯器鎖)的東西
但是多執行緒還是很有用的,比如網路爬蟲、文字處理等等。這時候由於網路情況和I/O的效能的限制,
Python直譯器會等待讀寫資料的函式呼叫返回,這個時候就可以利用多執行緒庫提高併發效率了。
需要使用多程序;
Java使用多執行緒則可以達到100%利用率
生產者-消費者模式
通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊
佇列在併發開發中最常用的。
我們藉助「生產者/消費者」模式來理解:生產者把生產的「訊息」放入佇列,消費者從這個佇列中對去對應的訊息執行。
事務:select @@tx_isolation
概念:應用程式中一系列操作,所有操作必須成功完成,否則每個操作中所作的所有更改都會被撤消。
結束條件
1.事務中步驟全部成功執行,事務提交
2.如果其中一個步驟失敗,傳送回滾操作,前面步驟取消
四個特徵
原子性:資料庫邏輯單位,要麼各操作都做,要麼都不做
一致性:資料庫只包含成功事務提交的結果
隔離性:一個事務的執行不能被其他事務干擾
持續性:一個事務一旦提交,他對資料庫中的資料改變就是永久性的
四種隔離級別
SQL標準定義了4類隔離模式,用來限定事務內外的哪些改變是可見的,哪些是不可見的。
- read uncommit讀取未提交內容:所有事務都能看到其他未提交事務的執行結果。
- read commit讀取提交內容:(大多資料庫系統的預設級別,非mysql),一個事務只能看見已經提交事務所作的改變。
- repeatable read可重讀:(Mysql預設),他確保同一事務的多個例項在併發讀取資料時看到同樣的資料行。
- serializable可序列化:最高的隔離級別,強制事務排序,使之不能相互衝突,在每個讀的資料行上加上共享鎖。
Redis
nosql 開源,C語言編寫的、Key-Value記憶體告訴資料庫,
儲存型別string、list、set、set、hash ,單個value的最大限制是1GB,
佇列技術,序列訪問,單程序單執行緒
資料淘汰策略:
1.從已設定過期時間的資料集中挑選最近最少使用的資料淘汰
2.從已設定過期時間的資料集中挑選要過期的資料淘汰
3.從已設定過期時間的資料集中任意選擇資料淘汰
伺服器
1.買一個雲伺服器,得到公網ip
2.linux用SSL開啟伺服器,windows使用putty開啟伺服器
3.執行的時候建立虛擬環境
4.傳輸python專案檔案(FileZilla)
4.安裝一個screen(python)將程式在後頭執行
web伺服器
B/S架構,Apache:socker監聽,工作佇列。
客戶端傳送請求,伺服器解析請求,讀取其他資訊,完成請求動作,關閉檔案和網路連線
如何在雲伺服器執行多個python指令碼
- 多終端執行:開sshd服務,安裝xshell,多開些會話
- 後臺執行:nohup xx.py;
- 守護程序方式:uwsgi/gunicorn/supervisor;
- docker方式:docker映象,執行container
python事件驅動模型(IO模型)
事件驅動程式設計是一種程式設計正規化,這裡程式的執行流由外部事件來決定。
它的特點是包含一個事件迴圈,當外部事件發生時使用回撥機制來觸發相應的處理。
Linux
io模式
- 阻塞 I/O(blocking IO)
- 非阻塞 I/O(nonblocking IO)
- I/O 多路複用( IO multiplexing)
- 訊號驅動 I/O( signal driven IO)
- 非同步 I/O(asynchronous IO)
通訊
- 管道:程序間通訊
- 訊息佇列:訊息的連結串列存放在核心中
- SOCKET:它可用於不同機器間的程序通訊
負載均衡
主要作用是將大量作業合理地分攤到多個操作單元上進行執行,用於解決網際網路架構中的高併發和高可用的問題
DNS伺服器裡可以內部負載均衡和全域性負載均衡
快取儲存靜態內容、根域名伺服器、頂級域名、權威域名