釋出一個基於 mprpc_config 二次封裝的 pip 包
mprpc 是一個超快速的Python RPC 庫,最近一直在看 RPC 的東西,考慮如何應用到公司的專案中,模仿 Celery 的方式二次封裝了一下。
專案地址: mprpc_config
安裝
pip install mprpc_config
用法
構建一個如下的目錄結構
-
config.py 包含RPC配置屬性(任意命名)
- INSTALLED_APP 必填引數,list 型別,將每一個包含 RPC 介面的模組名放進去
-
app_module_name RPC 介面模組(任意命名,可有多個)
- implement.py 介面模組(任意命名,可有多個),裡面包含 rpc 方法裝飾的介面函式
-
server.py RPC 伺服器
- 初始化 mprpc_config 的
Configration
類,將config.py
的模組名config
作為字串傳入 - 匯入 mprpc_config.rpc_server 的 RPCServer 和 StreamServer,啟動 RPC 伺服器
- 使用
bind_class
方法將初始化後的所有 RPC 介面繫結給RPCServer
- 使用 StreamServer 啟動 RPC 伺服器
- 初始化 mprpc_config 的
-
client.py RPC 客戶端(測試用,實際可分離)
客戶端啟動方式可參考 mprpc 。
示例
示例程式碼在
example
目錄
server.py
from mprpc_config.rpc_server import RPCServer, StreamServer
from mprpc_config import rpc_config
if __name__ == '__main__':
print('-------start server--------')
config = rpc_config.Configuration("config")
config.bind_class(RPCServer)
server = StreamServer(('127.0.0.1', 6000), RPCServer)
server.serve_forever(stop_timeout=10)
client.py
from mprpc_config.rpc_client import RPCClient, RPCPoolClient
from mprpc_config.rpc_client import RPCPool
print('---------- client ----------')
client = RPCClient('127.0.0.1', 6000)
print('2 add 4: ', client.call('add', 2, 4))
print('2 plus 4: ', client.call('plus', 2, 4))
print('2 minus 4: ', client.call('minus', 2, 4))
print('---------- done ----------')
print('---------- client pool ----------')
client_pool = RPCPool(RPCPoolClient, dict(host='127.0.0.1', port=6000))
with client_pool.connection() as client:
print('2 add 4: ', client.call('add', 2, 4))
print('2 plus 4: ', client.call('plus', 2, 4))
print('2 minus 4: ', client.call('minus', 2, 4))
print('---------- done ----------')
啟動 server 和 client
$ python server.py
---------- server ----------
$ python client.py
---------- client ----------
2 add 4: 6
2 plus 4: 8
2 minus 4: -2
---------- done ----------
---------- client pool ----------
2 add 4: 6
2 plus 4: 8
2 minus 4: -2
---------- done ----------
相關文章
- 基於workerman-jsonrpc二次封裝的一個packageJSONRPC封裝Package
- 基於刮刮卡Vue元件釋出一個NPM包Vue元件NPM
- 我的第一個擴充套件包釋出啦-封裝明道雲API套件封裝API
- 基於 uber 開源的 zap 二次封裝封裝
- 如何基於 React 封裝一個元件React封裝元件
- 基於Glide4.7.1二次封裝IDE封裝
- 基於python+selenium的二次封裝Python封裝
- 基於Vue+element-ui 的Table二次封裝VueUI封裝
- 如何釋出第一個屬於自己的npm包NPM
- 一分鐘釋出一個屬於自己的npm包NPM
- Dapper的封裝、二次封裝、官方擴充套件包封裝,以及ADO.NET原生封裝APP封裝套件
- 基於NPOI封裝匯出Excel方法封裝Excel
- Python 包安裝和管理工具pip 18.0 釋出Python
- 如何釋出一個 npm 包NPM
- 基於Vue.js封裝一個簡單的select元件Vue.js封裝元件
- 封裝一個簡單的樂觀鎖方法 -基於Laravel 8封裝Laravel
- 基於 Rush 的 Monorepo 多包釋出實踐Mono
- 【開源】釋出一個基於JavaFX的小遊戲:CrazyAlphaJava遊戲
- 如何釋出一個 Composer 包
- 基於 antd 風格的 element-table + pagination 的二次封裝封裝
- conda pip pip3 安裝包的一些常見用法
- React 折騰記 – (9) 基於Antd+react-router-breadcrumbs-hoc封裝一個小巧的麵包屑元件React封裝元件
- React 折騰記 - (9) 基於Antd+react-router-breadcrumbs-hoc封裝一個小巧的麵包屑元件React封裝元件
- MATLAB 封裝釋出exeMatlab封裝
- 【JavaScript框架封裝】實現一個類似於JQuery的動畫框架的封裝JavaScript框架封裝jQuery動畫
- Flutter 基於Bloc框架的封裝FlutterBloC框架封裝
- axios的二次封裝iOS封裝
- 如何釋出一個 TypeScript 編寫的 npm 包TypeScriptNPM
- pip指定安裝包版本
- pip 命令安裝模組包
- 基於Ant Design Vue封裝一個表單控制元件Vue封裝控制元件
- 基於DotNetCoreNPOI封裝特性通用匯出excelNetCore封裝Excel
- LDialog基於DialogFragment封裝的庫,也許是一個Nice的庫Fragment封裝
- 基於vue-cli3快速釋出一個fullpage元件Vue元件
- 封裝一個的toast彈出框(vue專案)封裝ASTVue
- 基於spring boot框架進行二次封裝,微型框架編寫思路Spring Boot框架封裝
- 基於 Fetch 的請求封裝封裝
- 基於javascript的拖拽類封裝^o^JavaScript封裝