最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)Thrift服務(wù)端的方法

 更新時(shí)間:2021年04月19日 17:02:21   作者:酌三巡  
這篇文章主要介紹了python實(shí)現(xiàn)Thrift服務(wù)端的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

近期在項(xiàng)目中存在跨編程語言協(xié)作的需求,使用到了Thrift。本文將記錄用python實(shí)現(xiàn)Thrift服務(wù)端的方法。

環(huán)境準(zhǔn)備

  • 根據(jù)自身實(shí)際情況下載對(duì)應(yīng)的Thrift編譯器,比如我在Windows系統(tǒng)上使用的是thrift-0.9.3.exe 。下載地址:http://archive.apache.org/dist/thrift/
  • python安裝thrift庫:pip install thrift

編寫.thrift文件

.thrift文件定義了Thrift服務(wù)端和Thrift客戶端的通信接口,在該文件中定義的接口需由服務(wù)端實(shí)現(xiàn),并可被客戶端調(diào)用。Thrift編譯器會(huì)調(diào)用.thrift文件生成不同語言的thrift代碼,用于之后實(shí)現(xiàn)thrift服務(wù)端或thrift客戶端。

.thrift文件的編寫規(guī)則可參考Thrift白皮書。下面將以demo.thrift文件舉例

service DemoService{
    string ping(1:string param)
    map<i32,string> get_int_string_mapping_result(1:i32 key, 2:string value)
    bool get_bool_result()
}

生成python對(duì)應(yīng)的thrift代碼

使用以下命令可以生成不同語言的thrift代碼:

thrift --gen <language> <Thrift filename>

 通過thrift-0.9.3.exe --gen py demo.thrift 命令生成python版本的thrift文件,文件夾為gen-py,如下所示:

編寫服務(wù)端

編寫服務(wù)端server.py,用于實(shí)現(xiàn)在demo.thrift文件中定義的接口功能。

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
import sys

sys.path.append("./gen-py/")
from demo import DemoService
import random


class DemoServer:
    def __init__(self):
        self.log = {}

    def ping(self, param):
        return "echo:" + param

    def get_int_string_mapping_result(self, key, value):
        return {key: value}

    def get_bool_result(self):
        return random.choice([True, False])


if __name__ == '__main__':
    # 創(chuàng)建處理器
    handler = DemoServer()
    processor = DemoService.Processor(handler)

    # 監(jiān)聽端口
    transport = TSocket.TServerSocket(host="0.0.0.0", port=9999)

    # 選擇傳輸層
    tfactory = TTransport.TBufferedTransportFactory()

    # 選擇傳輸協(xié)議
    pfactory = TBinaryProtocol.TBinaryProtocolFactory()

    # 創(chuàng)建服務(wù)端
    server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)

    # 設(shè)置連接線程池?cái)?shù)量
    server.setNumThreads(5)

    # 啟動(dòng)服務(wù)
    server.serve()

編寫客戶端用于測試

編寫客戶端client.py,用于測試服務(wù)端功能是否可用。

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
import sys
sys.path.append("./gen-py/")

from demo import DemoService


if __name__ == '__main__':
    transport = TSocket.TSocket('127.0.0.1', 9999)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = DemoService.Client(protocol)

    # 連接服務(wù)端
    transport.open()

    recv = client.ping("test")
    print(recv)

    recv = client.get_int_string_mapping_result(10, "MyThrift")
    print(recv)

    recv = client.get_bool_result()
    print(recv)

    # 斷連服務(wù)端
    transport.close()

編寫完成后,整個(gè)項(xiàng)目結(jié)構(gòu)如下圖所示:

測試服務(wù)端

運(yùn)行服務(wù)端server.py后,運(yùn)行客戶端client.py,打印的內(nèi)容如下:

echo:test
{10: 'MyThrift'}
True

此時(shí)客戶端能夠正常調(diào)用服務(wù)端所提供的接口。(PS:在調(diào)試過程中,也許需要修改gen-py文件夾中Thrift編譯器生成的python代碼)

以上就是python實(shí)現(xiàn)Thrift服務(wù)端的方法的詳細(xì)內(nèi)容,更多關(guān)于python實(shí)現(xiàn)Thrift服務(wù)端的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python基礎(chǔ)教程之控制結(jié)構(gòu)詳解

    Python基礎(chǔ)教程之控制結(jié)構(gòu)詳解

    Python中有三大控制結(jié)構(gòu),分別是順序結(jié)構(gòu)、分支結(jié)構(gòu)(選擇結(jié)構(gòu))以及循環(huán)結(jié)構(gòu),任何一個(gè)項(xiàng)目或者算法都可以使用這三種結(jié)構(gòu)來設(shè)計(jì)完成,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之控制結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • 一起用Python做個(gè)上課點(diǎn)名器的制作過程

    一起用Python做個(gè)上課點(diǎn)名器的制作過程

    今天給大家分享一個(gè)讀者粉絲投稿的,關(guān)于上課點(diǎn)名的實(shí)戰(zhàn)案例,對(duì)Python上課點(diǎn)名器實(shí)現(xiàn)過程感興趣的朋友,一起來看看是如何實(shí)現(xiàn)的吧
    2021-09-09
  • python關(guān)閉print輸出信息詳情

    python關(guān)閉print輸出信息詳情

    這篇文章主要介紹了python關(guān)閉print輸出信息詳情,當(dāng)我們遇到需要關(guān)閉print輸出信息的情況,我們可以通過控制sys.stdout來實(shí)現(xiàn)print輸出的開關(guān),下面文章就用一個(gè)簡單的例子來實(shí)現(xiàn),需要的小伙伴可以參考一下
    2022-02-02
  • python順序的讀取文件夾下名稱有序的文件方法

    python順序的讀取文件夾下名稱有序的文件方法

    今天小編就為大家分享一篇python順序的讀取文件夾下名稱有序的文件方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • VS Code有哪些奇技淫巧(必知)

    VS Code有哪些奇技淫巧(必知)

    VS Code這幾年作為一款熱門的開發(fā)工具,逐漸受到更多開發(fā)者的歡迎,今天給大家分享VS Code有哪些奇技淫巧,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • 快速解決jupyter啟動(dòng)卡死的問題

    快速解決jupyter啟動(dòng)卡死的問題

    這篇文章主要介紹了快速解決jupyter啟動(dòng)卡死的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python 運(yùn)行 shell 獲取輸出結(jié)果的實(shí)例

    Python 運(yùn)行 shell 獲取輸出結(jié)果的實(shí)例

    今天小編就為大家分享一篇Python 運(yùn)行 shell 獲取輸出結(jié)果的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python?圖形繪制詳細(xì)代碼(一)

    Python?圖形繪制詳細(xì)代碼(一)

    這篇文章主要介紹了Python?圖形繪制詳細(xì)代碼,文章主要從最簡單圖像的開始,在同一圖上繪制兩條或多條線一些簡單操作,想了解的小伙伴可以學(xué)習(xí)一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2021-12-12
  • 解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題

    解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題

    這篇文章主要介紹了解決Keras TensorFlow 混編中 trainable=False設(shè)置無效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python上下文管理器全實(shí)例詳解

    Python上下文管理器全實(shí)例詳解

    在本篇文章里小編給大家整理的是關(guān)于Python上下文管理器全實(shí)例解析的知識(shí)點(diǎn),需要的朋友們參考下。
    2019-11-11

最新評(píng)論

许昌市| 天柱县| 吉林省| 临沂市| 宁安市| 龙海市| 大余县| 通州区| 枣庄市| 双城市| 巴中市| 沁水县| 阿拉尔市| 海晏县| 海原县| 兰州市| 安化县| 增城市| 巫山县| 西充县| 太湖县| 达拉特旗| 丰原市| 扶沟县| 淄博市| 南华县| 安吉县| 增城市| 玛曲县| 清水县| 商水县| 阳城县| 开封市| 蓬莱市| 云阳县| 康马县| 阿克陶县| 望奎县| 商城县| 建昌县| 乳山市|