本文目錄一覽:
- 1、python後端開發需要學什麼?
- 2、python grpc如何給proto文件中map類型的變數賦值?
- 3、grpc原理
- 4、python grpc起的服務怎麼測試
- 5、grpc python,client怎樣給map類型填值
- 6、gRPC入坑記
python後端開發需要學什麼?
可以參考下面的路徑去學習,祝你學有所成,公司最近在人工智慧和自然語言處理的項目後端項目,我也是網上找了很多知識,最後給自己列了一個學習的目錄,按照這個在複習並在總結,希望能幫到你:
計算機基本認知,環境搭建 python環境搭建
計算機基本認識,進位轉換
python注釋使用
python變數使用
python數據類型_Number
python數據類型 str字元串類型
容器類型數據list,tuple,str
容器類型數據set,dict
變數緩存機制
自動類型轉換
Number強制類型轉換
python運算符的使用 容器類型數據強制類型轉換
字典強轉等長二級容器
運算符_算數_比較
運算符_賦值_成員
運算符_身份_邏輯
運算符_位運算_優先順序
python流程式控制制 代碼塊
流程式控制制if
多項巢狀分支
循環結構while
循環判斷經典題
字元串的相關操作
python循環結構
關鍵字continue_break_pass
for循環的遍歷_range
字元串,列表內置方法
字元串函數
format字元串格式化
format特殊符號的使用
列表的操作
列表函數
字典,集合內置方法+文件操作
字典的相關函數
集合操作_函數
文件操作
文件加號模式
函數,函數參數 文件相關函數
函數
形參實參
默認形參_關鍵字形參
收集參數
命名關鍵字參數
全局/局部變數,閉包 return返回值
函數名的使用
局部變數_全局變數
函數的嵌套LEGB
關鍵字nonlocal
閉包函數
遞歸,匿名函數
locals和globals
閉包特點意義
遞歸含義
斐波那契_尾遞歸
匿名函數lambda
迭代器,高階函數 迭代器
高階函數_map
高階函數_reduce
高階函數_sorted
高階函數_filter
推導式 列表推導式
推導式題
集合_字典推導式
生成器表達式
生成器函數
內置方法,linux基本命令 內置函數
可滑動序列
面試題演練
linux安裝
linux基本命令
python模塊 序列化模塊
數學模塊
隨機模塊
time模塊
python模塊 os模塊
os_shutil
os.path模塊
計算文件夾大小
zipfile
tarfile
導入模塊包,oop面向對象認知
import_from絕對導入
import_from相對導入(單入口)
oop面向對象
類的封裝性
oop之封裝,繼承 類的相關操作
對象和類的刪除操作
單繼承
多繼承
菱形繼承
oop之多態,魔術方法 多態
魔術方法__new__
單態模式
析構方法__del__
oop之魔術方法,異常處理 魔術方法__call__
魔術方法__str__repr__
魔術方法__bool_add_len__
了解異常
異常處理語法
主動拋出異常
裝飾器
裝飾器
靜態綁定方法
property
正則表達式 單個字元匹配
多個字元匹配
匹配分組
命名分組
正則函數
正則計算器小程序
認識網路 bs_cs流程
傳輸數據流程
交換機和區域網的網路通訊
arp協議
認識tcp/udp協議
tcp基本語法
tcp循環發消息
udp基本語法
udp循環發消息
黏包
基於tcp協議下的應用 socketserver並發
文件校驗
伺服器合法性校驗
tcp登錄
並發編程之進程 進程
join
守護進程
lock鎖
Semaphore
生產者消費者模型 Event事件
進程隊列Queue
生產者和消費者模型
JoinableQueue
Manager.py
並發編程之線程
.線程
用類定義線程
守護線程
lock保證線程數據安全
信號量_Semaphore
死鎖,互斥鎖,遞歸鎖
線程池,進程池,協成的使用
事件Event
線程隊列
進程池和線程池
回調函數
協程
協程的爬蟲案例
mysql安裝(linux+windows+xshell+navicat)
掌握資料庫mysql基本操作
mysql登錄,服務啟動
創建賬戶,用戶授權
資料庫,數據表,數據的增刪改查
認識常用數據類型
資料庫的存儲引擎和約束
欄位約束
約束的刪減
存儲引擎區別用法
數據表之間的關係
查詢數據表
單表查詢
多表聯查
子查詢
帶EXISTS關鍵字的子查詢
python操作mysql
python連接mysql的事務處理
sql注入
python連接mysql增刪改查
mysql數據恢復
HTML/CSS html文檔介紹,html標籤,body標籤,head標籤介紹,head標籤中的meta標籤和link標籤和title標籤介紹,body中的標籤分類,基礎標籤,img、a、列表、表格、input、label、select等標籤,作業講解,form標籤介紹和示例講解,css介紹,引入,css選擇器,背景設置,高度寬度,字體效果,邊框、盒子模型、display屬性、float屬性等
CSS 偽類選擇器,文字裝飾、a標籤補充、定位、權重、小米商城導航欄講解,原型頭像示例講解
JS基礎/BOM和DOM操作 小米商城作業,js介紹和js引入,js數據類型、流程式控制制、函數等操作,js中的JSON,BOM對象的彈框、location對象、定時器、直接查找選擇器、間接查找選擇器、值操作、類值操作、樣式操作、button按鈕補充、事件和綁定事件的兩種方式,常用事件練習
jQuery/Bootstrap 作業講解,jquery介紹,引入、選擇器、篩選器、值操作、文檔操作、刪除和清空標籤、邏輯運算符、克隆、事件冒泡和事件委託、綁定事件的方式,作業講解和模態對話框示例,input事件和頁面載入事件補充、bootstrap介紹和引入、全局css樣式、組件和常用插件
自定義web框架 作業講解、web框架介紹、自定義web框架實現、動態頁面、返回不同的html頁面、函數版、多線程版、返回靜態文件版,wsgiref版等web框架通過socket來實現,還有jinja2的簡單使用
django下載安裝和URL路由系統 django介紹、MTV和MVC框架介紹、常用指令、目錄結構、pycharm創建django項目、request的常用屬性介紹、登錄示例、url路由系統介紹、有名分組和無名分組,
視圖/模板 request對象的常用方法和屬性、響應方法介紹和使用,CBV和FBV、CBV和FBV加裝飾器,CBV源碼講解,模板渲染系統介紹,語法、簡單示例、內置過濾器、for循環標籤、if標籤、with標籤、自定義過濾器和標籤、模板繼承等
Dajngo的ORM(1) orm介紹,資料庫同步指令使用和流程分析、配置連接mysql模型類中的屬性介紹和常用參數說明,創建表和數據、增加的兩種方法、刪除、更新的兩種方法、查詢的13個api介面
Dajngo的ORM(2) 單表圖書管理系統展示和添加作業講解、choices屬性、auto_now_add和auto_now參數講解、url別名和反向解析,基於雙下劃線的模糊查詢,多表結構介紹,圖書管理系統編輯和刪除作業講解、多表關係模型類創建和欄位說明和參數介紹、多表數據的添加操作,多表的刪除和修改、基於對象的跨表查詢、雙下劃線跨表查詢、查看原生sql語句的方法、聚合查詢、分組查詢、F查詢、Q查詢等
Ajax與Django/ 中間件 ajax的介紹和簡單示例,ajax登錄示例、列表數據展示示例,ajax操作cookie的補充、中間件介紹、自定義中間件的方法、5個中間件方法的介紹和使用、基於中間件的session登錄認證
cookie、session以及用戶認證組件 cookie介紹,cookie的流程解析,django操作cookie和其他參數介紹、session的說明、django的session操作等,多表圖書管理系統作業講解
vue初識、es6基本語法、指令系統 let、const、v-if、v-for、v-html、v-text、v-model、v-show、生命周期鉤子函數、
組件化開發、組件傳值、axios簡單使用 組件化開發、組件傳值、axios簡單使用、vue-router使用、vue-cli安裝
項目初始化/首頁 項目介紹、創建、初始化、element-ui的使用,單文件組件的使用和axios在單文件中的使用和配置、vue-cli的介紹和使用、路飛項目頂部導航欄頁面效果搭建,輪播圖組件的使用和調整、購物車頁面搭建和課程詳情頁面搭建,vue-video-player視頻播放插件
drf組件 序列化器、drf簡單示例、restful規範、反序列化的校驗機制
drf組件 apiview、request和response對象、modelserializer、序列化器保存數據、read_only和write_only的參數
drf組件 viewset、drf路由功能、viewset視圖基類的使用、視圖子類、通用視圖類genericapiview/排序、django-filter過濾器、頻率組件、分頁組件、介面文檔、異常處理、xadmin的安裝和使用、認證組件和許可權組件
git、消息隊列 git企業中的使用模式,rabbimq消息隊列的應用
rpc通信,grpc組件 rpc的概念以及通信模式,最火的grpc組件使用
輕量級Flask框架 Werkzeug服務介紹、Flask框架介紹
路由系統、自定義路由擴展
Cookie、Session、Http請求和響應
藍圖、消息閃現、中間件
Flask常用擴展、WTForms、使用SQLAchemy ORM
Admin、Restful、websocket原理、magic string, payload len,masking key
請求和上下文、多app應用、離線腳本、自定義擴展
服務端項目搭建,項目配置(session、資料庫、日誌相關),項目初始化
jsonrpc模塊基本配置和使用,客戶端展示首頁及登錄註冊葉綿,APICloud頁面控制管理
python進階 並發、同步、非同步、鎖,線進程概念以及協程實現原理
mysql進階課 基礎知識梳理、索引、執行計劃
mysql進階課 存儲引擎、日誌管理、備份恢復、主從賦值、優化
redis,mongodb 事務和發布訂閱、RDB和AOF持久化、緩存擊穿、緩存雪崩等原理介紹、 用戶管理和複製集(RS)總結、sharding cluster 分片集群的搭建、分片使用和相關策略等
演算法與設計模式 鏈表、二叉樹、常見演算法、二分查找、插入排序、希爾排序、快排、堆排序、哈希查找
演算法與設計模式 設計模式,單例模式、工廠模式、策略模式、觀察者模式
演算法與設計模式 leetcode經典演算法解析
知識體系差不多就這麼多了,再就是項目部分,具體項目要看需求了,學會了釣魚的方法,不怕釣不到魚哦,無論在哪個行業做什麼樣的項目都沒問題呢!
我自己也搜集了一些經典的資料,要是想要加我百度網盤:艾美電商,我發給你!
python grpc如何給proto文件中map類型的變數賦值?
改完之後,你可以選擇project-clean,clean後你項目的R.java文件就會重新生成,所有的資源ID會重新分配,這樣子你所修改的資源才能被Android真正識別,有時這個操作不是必要的,但是如果出現你修改了資源後,你的項目中出現了一些問題,那麼執行Clean是一個必須的選擇,這些資源包括drawable下的圖片,布局裡id的修改,values下資源的修改,你可以著手試一下 Good luck
grpc原理
1)需要使用protobuf定義介面,即.proto文件
2)然後使用compile工具生成特定語言的執行代碼,比如JAVA、C/C++、Python等。類似於thrift,為了解決跨語言問題。
3)啟動一個Server端,server端通過偵聽指定的port,來等待Client鏈接請求,通常使用Netty來構建,GRPC內置了Netty的支持。
4)啟動一個或者多個Client端,Client也是基於Netty,Client通過與Server建立TCP長鏈接,並發送請求;Request與Response均被封裝成HTTP2的stream Frame,通過Netty Channel進行交互。
對於GRPC的「鼓吹」,本文不多表述,截止到今日,GRPC仍然處於開發階段,尚沒有release版本,而且特性也很多需要補充;GRPC基於protobuf 3.x,但是protobuf 3.x也沒有release版本;雖然HTTP2協議已成定局,但尚未被主流web容器包括代理伺服器支持,這意味著GRPC在HTTP負載均衡方面尚有欠缺;最終,在短期內我們還不能在production環境中實施,可以做技術儲備。不過GRPC的缺點,在將來將會成為它的優點,我們需要時間等待它的成熟。
1)GRPC尚未提供連接池
2)尚未提供「服務發現」、「負載均衡」機制
3)因為基於HTTP2,絕大部多數HTTP Server、Nginx都尚不支持,即Nginx不能將GRPC請求作為HTTP請求來負載均衡,而是作為普通的TCP請求。(nginx將會在1.9版本支持)
4)GRPC尚不成熟,易用性還不是很理想;就本人而言,我還是希望GRPC能夠像hessian一樣:無IDL文件,無需代碼生成,介面通過HTTP表達。
5)Spring容器尚未提供整合。
在實際應用中,GRPC尚未完全提供連接池、服務自動發現、進程內負載均衡等高級特性,需要開發人員額外的封裝;最大的問題,就是GRPC生成的介面,調用方式實在是不太便捷(JAVA),最起碼與thrift相比還有差距,希望未來能夠有所改進。
python grpc起的服務怎麼測試
1、首先是Keepalived機制。
1)客戶端的Keepalives設置可以work了。
2)設置Keepalives後,在整個網路連接建立完成之後,會不斷的發送ping消息給服務端。
3)服務端根據Keppavlied的ping消息來自動識別哪些連接是斷了的。
2、服務端可以設置連接的時效了,當設置連接的最大時間到了,該連接將會中斷掉。
3、增加了trace的一些傳遞。
4、對LoadBalancers進行了一些變化。
grpc python,client怎樣給map類型填值
相比於TSimpleServer效率提升主要體現在IO多路復用上,TNonblockingServer採用非阻塞IO,同時監控多個socket的狀態變化;
gRPC入坑記
概要
由於gRPC主要是谷歌開發的,由於一些已知的原因,gRPC跑demo還是不那麼順利的。單獨寫這一篇,主要是gRPC安裝過程中的坑太多了,記錄下來讓大家少走彎路。
主要的坑:
本文講解gRPC demo的同時,會介紹如何解決這些坑。本文對應的Github地址: 。該倉庫存儲了demo示例,以及部分系統編譯好的二進位包,大家覺得有些步驟里耗時實在太長了,可以直接clone該倉庫,複製二進位包到對應目錄(僅限測試開發,生產環境還是老老實實自己編譯吧)。
升級GCC
gRPC命令行工具編譯需要使用 GCC4.8及以上版本。CentOS6系列的內置版本是GCC4.7。
如果你的系統GCC版本=4.8,可以忽略本節。如果僅使用golang、java,請忽略本節。
如果需要升級gcc至4.8或更高版本,建議直接採用安裝SCL源之後安裝devtoolset-6(devtoolset-6目前gcc版本為6.3),因為devtoolset-4及之前的版本都已經結束支持,只能通過其他方法安裝。
升級到gcc 6.3:
需要注意的是scl命令啟用只是 臨時 的,退出shell或重啟就會恢復原系統gcc版本。如果要長期使用gcc 6.3的話:
這樣退出shell重新打開就是新版的gcc了。其它版本同理。
升級到gcc 7.3:
已經停止支持的devtoolset4(gcc 5.2)及之前版本的安裝方法,可能比較慢,大家感興趣的話可以嘗試。
編譯gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,這些語言都是基於C版本開發的,共用代碼庫一個代碼庫。
如果使用C版本的gRPC,最終要從源碼里編譯出下列工具:
這些工具作為插件供proto編譯器使用。需要先下載 grpc/grpc github上的源碼。
這裡有2個坑:
1、grpc/grpc倉庫比較大,鑒於國內訪問的網速,建議使用國內鏡像。碼雲()提供了同步更新的鏡像地址:
這樣下載速度提高了不少。
2、git submodule update這個命令實際就是在下載.gitmodules文件里定義的第三方依賴項到third_party目錄,這個依賴項有很多,大家可以打開.gitmodules文件查看下詳情。依賴的倉庫都在github上,下載沒幾個小時是下載不下來的,就等著慢慢下載吧。
回頭想想,我們花費了很多時間,結果只是為了得到grpc的proto編譯插件。
PHP相關支持
PHP暫時不支持作為grpc的服務端。作為客戶端是可以的,需要機器安裝:
其中protoc和protobuf c擴展已經在 Protobuf 小試牛刀 介紹過了,這裡不再贅述。上一小節里如果安裝成功,那麼grpc_php_plugin也是有了的。下面介紹如何安裝PHP版的gRPC庫。
安裝grpc c擴展:
要求:GCC編譯器需要4.8及以上版本。可以使用pecl安裝:
也可以指定版本:
或者下載源碼()安裝:
grpc/grpc代碼庫里也有PHP擴展的C源碼,在grpc/src/php/ext/grpc目錄,進去也可以直接編譯。
編譯完成後在php.ini里添加,使用php –ri grpc可以查看信息。
安裝完C擴展後,還需要使用composer安裝grpc的庫:
gRPC示例
編寫gRPC proto
一共定義了三個文件:
其中 User 作為 Model定義,Response 用於 RPC統一返回定義,GreeterService 則是服務介面定義。
限於篇幅,proto文件詳見 倉庫的proto目錄。
GreeterService.proto文件內容如下:
這裡面定義了一個service,相當於定義了一個服務介面,我們把方法名、參數定義好了,後面需要去實現它。由於gRPC不支持PHP作為服務端,這裡我們使用Golang作為服務端。
首先需要使用proto工具編譯出golang的代碼:
執行成功,會在 Pb_Go目錄里生成Go代碼:
如果需要生成PHP客戶端的代碼,則需要使用grpc php的命令行工具grpc_php_plugin,前面小結如果執行成功,這個工具已經有了。然後:
最終生成的文件:
注意:編譯那裡如果我們不加–grpc_out=../$out –plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP類是沒有GreeterClient的。這個文件是gRPC編譯工具自動生成的,用於連接gRPC服務端。
go編寫服務
我們用Golang寫服務端。上面雖然生成了Golang的部分代碼,但真正的服務還沒有寫呢。
main.go
首先我們新建個main.go,代碼不多,我直接貼出來:
然後就可以編譯了。
有個大坑:go build main.go的時候會先下載go.mod里定義的依賴(依賴比較多,詳情查看:),其中下面這條非常慢,倉庫太大了,雖然重定向到github:
為了快速下載,我在碼雲上做了鏡像,地址:gitee.com/52fhy/google-api-go-client 。改了之後下載快多了。
編譯成功後,生成了二進位文件main。我們可以直接運行:
go test
為了測試我們寫的服務是否正常,可以寫測試用例:
test_client.go
運行:
運行有點慢,感覺依賴的庫多了。
php客戶端
使用gRPC PHP客戶端,確保你已經安裝了:
示例:
client_test.php
運行後輸出:
常見問題
1、CentOS6使用 go mod獲取第三方依賴包unknown revision xxx錯誤
解決:其實go mod調用鏈中會用到一些git指令,當git版本比較舊時,調用失敗產生錯誤,並給出歧義的提示信息。方法就是升級git版本,CentOS6自帶的git是1.7版本。升級完畢後,再嘗試go mod。
快速升級方法:
centos6:
2、PHP報錯:Fatal error: Class ‘Google\Protobuf\Internal\Message’ not found
解決:請安裝PHP的protobuf c擴展。
3、PHP報錯:Fatal error: Class ‘\Grpc\BaseStub’ not found
解決:使用composer require grpc/grpc安裝grpc。另外對應的grpc C擴展也要安裝。
4、下載 github release包很慢怎麼辦?
解決:下載Mac版 Free Download Manager 下載工具可以解決Github 下載緩慢或失敗問題。速度嗖嗖的。
參考
1、為CentOS 6、7升級gcc至4.8、4.9、5.2、6.3、7.3等高版本
2、centos 6.x/7.x使用yum升級git版本 – 夜空
3、Protobuf 小試牛刀 – 飛鴻影
(本文完)
原創文章,作者:QMWAD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/330921.html