grpc教程python(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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QMWAD的頭像QMWAD
上一篇 2025-01-16 15:46
下一篇 2025-01-16 15:46

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29

發表回復

登錄後才能評論