日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

通過實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法

瀏覽:164日期:2022-07-18 13:22:27

單線程同步

使用socket傳輸數(shù)據(jù) 使用json序列化消息體 struct將消息編碼為二進(jìn)制字節(jié)串,進(jìn)行網(wǎng)絡(luò)傳輸

消息協(xié)議

// 輸入{ in: 'ping', params: 'ireader 0'}// 輸出{ out: 'pong', result: 'ireader 0'}

客戶端 client.py

# coding: utf-8# client.pyimport jsonimport timeimport structimport socketdef rpc(sock, in_, params): response = json.dumps({'in': in_, 'params': params}) # 請求消息體 length_prefix = struct.pack('I', len(response)) # 請求長度前綴 sock.sendall(length_prefix) sock.sendall(response) length_prefix = sock.recv(4) # 響應(yīng)長度前綴 length, = struct.unpack('I', length_prefix) body = sock.recv(length) # 響應(yīng)消息體 response = json.loads(body) return response['out'], response['result'] # 返回響應(yīng)類型和結(jié)果if __name__ == ’__main__’: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 8080)) for i in range(10): # 連續(xù)發(fā)送10個(gè)rpc請求 out, result = rpc(s, 'ping', 'ireader %d' % i) print out, result time.sleep(1) # 休眠1s,便于觀察 s.close() # 關(guān)閉連接

通過實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法

服務(wù)端 blocking_single.py

# coding: utf8# blocking_single.pyimport jsonimport structimport socketdef handle_conn(conn, addr, handlers): print addr, 'comes' while True: # 循環(huán)讀寫 length_prefix = conn.recv(4) # 請求長度前綴 if not length_prefix: # 連接關(guān)閉了 print addr, 'bye' conn.close() break # 退出循環(huán),處理下一個(gè)連接 length, = struct.unpack('I', length_prefix) body = conn.recv(length) # 請求消息體 request = json.loads(body) in_ = request[’in’] params = request[’params’] print in_, params handler = handlers[in_] # 查找請求處理器 handler(conn, params) # 處理請求def loop(sock, handlers): while True: conn, addr = sock.accept() # 接收連接 handle_conn(conn, addr, handlers) # 處理連接def ping(conn, params): send_result(conn, 'pong', params)def send_result(conn, out, result): response = json.dumps({'out': out, 'result': result}) # 響應(yīng)消息體 length_prefix = struct.pack('I', len(response)) # 響應(yīng)長度前綴 conn.sendall(length_prefix) conn.sendall(response)if __name__ == ’__main__’: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 創(chuàng)建一個(gè)TCP套接字 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 打開reuse addr選項(xiàng) sock.bind(('localhost', 8080)) # 綁定端口 sock.listen(1) # 監(jiān)聽客戶端連接 handlers = { # 注冊請求處理器 'ping': ping } loop(sock, handlers) # 進(jìn)入服務(wù)循環(huán)

通過實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法

多線程同步

使用線程庫thread創(chuàng)建原生線程 服務(wù)器可并行處理多個(gè)客戶端

服務(wù)端 multithread.py

通過實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法

多進(jìn)程同步

Python的GIL導(dǎo)致單個(gè)進(jìn)程只能占滿一個(gè)CPU核心,多線程無法利用多核優(yōu)勢 os.fork()會生成子進(jìn)程 子進(jìn)程退出后,父進(jìn)程需使用waitpid系統(tǒng)調(diào)用收割子進(jìn)程,防止其稱為僵尸資源 在子進(jìn)程中關(guān)閉服務(wù)器套接字后,在父進(jìn)程中也要關(guān)閉服務(wù)器套接字 因?yàn)檫M(jìn)程fork后,父子進(jìn)程都有自己的套接字引用指向內(nèi)核的同一份套接字對象,套接字引用計(jì)數(shù)為2,對套接字進(jìn)程close,即將套接字對象的引用計(jì)數(shù)減1

PreForking同步

進(jìn)程比線程耗費(fèi)資源,通過PreForking進(jìn)程池模型對服務(wù)器開辟的進(jìn)程數(shù)量進(jìn)行限制,避免服務(wù)器負(fù)載過重 如果并行的連接數(shù)量超過了prefork進(jìn)程數(shù)量,后來的客戶端請求將會阻塞

單進(jìn)程異步

通過事件輪詢API,查詢相關(guān)套接字是否有響應(yīng)的讀寫事件,有則攜帶事件列表返回,沒有則阻塞 拿到讀寫事件后,可對事件相關(guān)的套接字進(jìn)行讀寫操作 設(shè)置讀寫緩沖區(qū) Nginx/Nodejs/Redis都是基于異步模型 異步模型編碼成本高,易出錯(cuò),通常在公司業(yè)務(wù)代碼中采用同步模型,僅在講究高并發(fā)高性能的場合才使用異步模型

PreForking異步

Tornado/Nginx采用了多進(jìn)程PreForking異步模型,具有良好的高并發(fā)處理能力

通過實(shí)例解析Python RPC實(shí)現(xiàn)原理及方法

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文在线播放| 99成人在线| 免费久久99精品国产自在现线| 亚洲经典在线| 日本不卡一区二区三区| 国产精品亚洲四区在线观看 | 亚洲一区二区网站| 在线综合亚洲| 日本免费一区二区视频| 精品视频高潮| av亚洲免费| 国产日韩视频| 91精品综合| 亚洲欧美日韩国产综合精品二区 | 国产一区二区三区自拍| 日本一区二区三区中文字幕| 日韩二区三区四区| 成人亚洲一区二区| 亚洲综合中文| 精品日韩一区| 日韩精品永久网址| 国产日本精品| 精品视频在线观看网站| 国内亚洲精品| 日韩国产一二三区| 欧美日韩国产观看视频| 亚洲欧美日韩国产一区二区| 国产精品久久久久久久久久白浆| 999国产精品999久久久久久| 国产婷婷精品| 国产极品嫩模在线观看91精品| 久久国产影院| 日韩国产在线一| 日韩精品首页| 四虎成人精品一区二区免费网站| 国产黄大片在线观看| 日本视频在线一区| av在线资源| 日本欧美在线| 激情综合网址| 国产精品成人自拍| 国产亚洲精品v| 九九久久国产| 综合国产精品| 久久激情一区| 麻豆精品一区二区综合av| 中文字幕av一区二区三区人| 亚洲成人精品| 国产伦乱精品| 婷婷国产精品| 麻豆视频观看网址久久| 午夜在线精品偷拍| 超碰在线99| 国产精品亚洲产品| 蜜臀av亚洲一区中文字幕| 激情综合网五月| 国产美女久久| 蜜臀国产一区二区三区在线播放| 中文字幕高清在线播放| 国产精品日韩精品在线播放| 久久午夜影视| 1024精品久久久久久久久| 国产成年精品| 97人人精品| 综合色一区二区| 性欧美xxxx免费岛国不卡电影| 国产精品久av福利在线观看| 免费人成黄页网站在线一区二区| 日韩国产一区二区| 精品一区二区三区中文字幕在线| 日本不卡视频一二三区| 美女91精品| 午夜亚洲福利在线老司机| 激情婷婷久久| 久久久蜜桃一区二区人| 91综合视频| 欧美xxxx中国| 成人国产精选| 久久男人天堂| 国内在线观看一区二区三区 | 国产亚洲高清视频| 欧美粗暴jizz性欧美20| 日韩不卡视频在线观看| 日韩理论视频| 日韩免费av| 精品欧美一区二区三区在线观看| 国模精品一区| 极品av在线| 欧美手机在线| 午夜一区在线| 五月激激激综合网色播| 亚洲精品极品| 青草久久视频| 国产视频一区二| 久久精品99久久久| 国产精品亚洲四区在线观看 | 91精品成人| 91成人网在线观看| 亚洲一区欧美二区| 亚洲精品一级| 国产乱码精品| 国产在线一区不卡| 另类中文字幕国产精品| 亚洲色诱最新| 亚洲一区二区小说| 人人爽香蕉精品| 欧美一级网址| 粉嫩av一区二区三区四区五区| 国产成人久久精品一区二区三区| 高清一区二区| 在线国产一区| 日本一区免费网站| 久久精品一本| 99成人超碰| 蜜桃视频第一区免费观看| 欧美亚洲一级| 日韩综合在线| 91成人精品视频| 日韩欧美激情| 久久久久伊人| 91精品国产调教在线观看| 国产亚洲精品v| 国产探花一区| 日韩免费在线| 少妇精品久久久一区二区| 老司机精品在线| 欧美成人久久| 欧美日韩一区二区三区四区在线观看| 捆绑调教美女网站视频一区| 亚洲高清二区| 日韩三级视频| 97精品视频在线看| 性色一区二区| 欧美精品不卡| 亚洲香蕉网站| 久久国产生活片100| 久久久久国产| 日韩精品免费观看视频| 黄在线观看免费网站ktv| 日韩一级欧洲| 美女av一区| 久久国产精品久久久久久电车| 国产精品成人自拍| 夜夜嗨网站十八久久| 欧美精品1区| 国产视频一区免费看| 精品网站999| 综合视频一区| 亚洲涩涩在线| 日本91福利区| 亚洲无线一线二线三线区别av| 国产欧美日韩在线观看视频| 国产专区一区| 久久中文字幕一区二区| 久久午夜精品一区二区| 国产a久久精品一区二区三区| 亚洲午夜久久| 久久久久久久久久久9不雅视频| 国产日韩欧美一区在线| 老色鬼久久亚洲一区二区| 91一区二区三区四区| 日韩av影院| 亚洲一区二区三区高清| 麻豆视频在线观看免费网站黄| 日韩精品欧美成人高清一区二区| 日本不良网站在线观看| 国产精品一站二站| 亚洲视频国产精品| 九九在线精品| 97se综合| 国产69精品久久| 国产伦精品一区二区三区视频| 亚洲综合精品| 不卡在线一区| 五月天av在线| 国产一区二区三区天码| 国产欧美日韩亚洲一区二区三区| 蘑菇福利视频一区播放| 性欧美xxxx免费岛国不卡电影| 精品精品99| 91精品国产一区二区在线观看| 日韩精品一二三| 国产高清一区| 色吊丝一区二区| 国产在线看片免费视频在线观看| 国产精品久久久久久久免费软件 | 日韩毛片视频| 成人精品国产亚洲| 欧美aa在线视频| 国产欧美三级| 青青草国产成人99久久| 日av在线不卡| 久热精品在线| 免费在线观看精品| 久久国产99| 日韩中文字幕一区二区三区| 亚洲深夜福利| 一级欧美视频| 日韩三区四区| 久久国际精品|