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

您的位置:首頁技術文章
文章詳情頁

Python網絡編程之ZeroMQ知識總結

瀏覽:30日期:2022-06-21 10:54:12
一、ZeroMQ概述 ZeroMQ(又名ØMQ,MQ,或zmq)像一個可嵌入的網絡庫,但其作用就像一個并發框架。 ZeroMQ類似于標準Berkeley套接字,其提供了各種傳輸工具,如進程內、進程間、TCP和組播中進行原子消息傳送的套接字 可以使用各種模式實現N對N的套接字連接,這些模式包括:發布-訂閱、任務分配、請求-應答。 ZeroMQ的速度足夠快,因此可充當集群產品的結構。 ZeroMQ的異步I/O模型提供了可擴展的多核應用程序,用異步消息來處理任務 ZeroMQ核心由C語言編寫,支持C、C++、java、python等多種編程語言的API,并可運行在大多數操作系統上

總結以下:ØMQ (ZeroMQ) 是一個基于消息隊列的多線程網絡庫,它封裝了網絡通信、消息隊列、線程調度等功能,向上層提供簡潔的API,應用程序通過加載庫文件,調用API函數來實現高性能網絡通信。

看起來有些抽象,下面我們結合ZeroMQ 的 Python 封裝———— pyzmp,用實例看一下ZeroMQ的三種最基本的工作模式。

二、安裝

安裝方法

pip install pyzmq

查看是否安裝成功

>>> import zmq>>> print(zmq.__version__)22.0.3三、Request-Reply (請求響應模式)3.1 Request-Reply模式概述: 消息雙向的,有來有往。 Client請求的消息,Server必須答復給Client。 Client在請求后,Server必須回響應,注意:Server不返回響應會報錯。 Server和Client都可以是1:N的模型。通常把1認為是Server,N認為是Client。 更底層的端點地址是對上層隱藏的,每個請求都隱含回應地址,而應用則不關心它。 ZMQ 可以很好的支持路由功能(實現路由功能的組件叫做 Device),把 1:N 擴展為 N:M(只需要加入若干路由節點)。

Python網絡編程之ZeroMQ知識總結

3.2 Client端python實現

#client.pyimport zmqcontext = zmq.Context()# Socket to talk to serverprint('Connecting to hello world server…')socket = context.socket(zmq.REQ)socket.connect('tcp://localhost:5555')socket.send(b'Hello')# Get the reply.message = socket.recv()print(f'Received reply [ {message} ]')3.3 Server端python實現

#server.pyimport timeimport zmqcontext = zmq.Context()socket = context.socket(zmq.REP)socket.bind('tcp://*:5555')while True: # Wait for next request from client message = socket.recv() print('Received request: %s' % message) # Do some ’work’ time.sleep(1) # Send reply back to client socket.send(b'World') 啟動client.py 首先會打印Connecting to hello world server… 但不會受到任何消息。 然后啟動server.py ,客戶端收到來自客戶端的request: b’Hello’ 此時client端收到來自server端的 reply: [ b’World’ ]

python client.py Connecting to hello world server…Received reply [ b’World’ ]

python server.py Received request: b’Hello’

可以試一下,多運行幾個client.py,看看情況是什么樣的。

Python網絡編程之ZeroMQ知識總結

四、Publish/Subscribe(訂閱-發布模式 )4.1 Pub-Subs模式概述: 消息單向,有去無回 一個發布端,多個訂閱端;發布端只管產生數據,發布端發布一條消息,可被多個訂閱端同時收到。 發布者不必關心訂閱者的加入和離開,消息會以 1:N 的方式擴散到每個訂閱者。 廣播所有client,沒有隊列緩存,斷開連接數據將永遠丟失。 如果Publish端開始發布信息時,Subscribe端尚未連接進來,則這些信息會被直接丟棄。 PUB和SUB誰bind誰connect并無嚴格要求(雖本質并無區別),但仍建議PUB使用bind,SUB使用connect 使用SUB設置一個訂閱時,必須使用zmq_setsockopt()對消息進行過濾

Python網絡編程之ZeroMQ知識總結

這里直接引用官方文檔的例子:

發布者:類似于一個天氣更新服務器,向訂閱者發送天氣更新,內容包括郵政編碼、溫度、濕度等信息

#Publisher.pyimport zmqfrom random import randrangecontext = zmq.Context()socket = context.socket(zmq.PUB)socket.bind('tcp://*:5556')while True: zipcode = randrange(1, 100000) temperature = randrange(-80, 135) relhumidity = randrange(10, 60) socket.send_string('%i %i %i' % (zipcode, temperature, relhumidity))

訂閱者:它監聽發布者更新的數據流,過濾只接收與特定郵政編碼相關的天氣信息,默認接收接收10條數據

#Subscribe.py import sysimport zmq# Socket to talk to servercontext = zmq.Context()socket = context.socket(zmq.SUB)print('Collecting updates from weather server...')socket.connect('tcp://localhost:5556')# Subscribe to zipcode, default is NYC, 10001zip_filter = sys.argv[1] if len(sys.argv) > 1 else '10001'# Python 2 - ascii bytes to unicode strif isinstance(zip_filter, bytes): zip_filter = zip_filter.decode(’ascii’)socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)# Process 5 updatestotal_temp = 0for update_nbr in range(5): string = socket.recv_string() zipcode, temperature, relhumidity = string.split() total_temp += int(temperature)print( 'Average temperature for zipcode ’%s’ was %dF' % (zip_filter, total_temp / (update_nbr + 1)))

Python網絡編程之ZeroMQ知識總結

五、Push/Pull(流水線模式)5.1 流水線模式概述: 主要用于多任務并行。 消息單向,有去無回。 Push的任何一個消息,始終只會有一個Pull端收到消息。 Push 端還是 Pull 端都可以做 server,bind 到某個地址等待對方訪問。 如果有多個PULL端同時連接到PUSH端,則PUSH端會在內部做一個負載均衡,采用平均分配的算法,將所有消息均衡發布到PULL端上。 由三部分組成,Push進行數據推送,work進行數據緩存,Pull進行數據競爭獲取處理。 存在一個數據緩存和處理負載,當連接被斷開,數據不會丟失,重連后數據繼續發送到對端。

Python網絡編程之ZeroMQ知識總結

ventilator 使用的是 SOCKET_PUSH,將任務分發到 Worker 節點上。Worker 節點上,使用 SOCKET_PULL 從上游接受任務,并使用 SOCKET_PUSH 將結果匯集到 Sink。值得注意的是,任務的分發的時候也同樣有一個負載均衡的路由功能,worker 可以隨時自由加入,ventilator 可以均衡將任務分發出去。

Push/Pull模式還是蠻常用的,這里我們主要測試一下它的負載均衡。

5.2 Ventilator

# ventilator.pyimport zmqimport timecontext = zmq.Context()socket = context.socket(zmq.PUSH)socket.bind('tcp://*:5557')while True: socket.send(b'test') print('已發送') time.sleep(1)5.3 worker

# worker.pyimport zmqcontext = zmq.Context()recive = context.socket(zmq.PULL)recive.connect(’tcp://127.0.0.1:5557’)sender = context.socket(zmq.PUSH)sender.connect(’tcp://127.0.0.1:5558’)while True: data = recive.recv() print('work1 正在轉發...') sender.send(data)5.4 sink

# sink.pyimport zmqimport syscontext = zmq.Context()socket = context.socket(zmq.PULL)socket.bind('tcp://*:5558')while True: response = socket.recv() print('response: %s' % response)

打開4個Terminal,分別運行

python sink.pypython worker.pypython worker.pypython ventilator.py

Python網絡編程之ZeroMQ知識總結

六、總結

消息模型可以根據需要組合使用,后續的代理模式和路由模式等都是在三種基本模式上面的擴展或變異。

到此這篇關于Python網絡編程之ZeroMQ知識總結的文章就介紹到這了,更多相關Python ZeroMQ知識總結內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久xxx视频| 亚洲欧美日本视频在线观看| 一区在线观看| 午夜免费一区| 亚洲激情二区| 亚洲综合电影一区二区三区| 亚洲欧美日韩专区| 老牛国产精品一区的观看方式| 欧美在线亚洲| 免费在线观看一区二区三区| 一区二区国产精品| 日韩高清成人在线| 国产精品久久久久久久久久妞妞| 欧美aa在线视频| 老牛影视精品| 性欧美xxxx免费岛国不卡电影| 欧美日韩一区二区综合| 99久久精品国产亚洲精品| 久久高清免费| 国产视频一区免费看| 亚洲一区二区三区久久久| 日本伊人午夜精品| 国产精品大片| 日韩深夜视频| 欧美资源在线| 欧美亚洲综合视频| 国产一区二区三区四区五区传媒 | 国产精品男女| 成人一二三区| 在线一区视频| 日韩高清一区在线| 国产不卡av一区二区| 午夜欧美精品| 日韩高清不卡一区二区| 欧美xxxx中国| 免费日韩视频| 精品视频在线一区二区在线| 性欧美videohd高精| 久久亚洲欧美| 国产精品夜夜夜| 欧美一区二区三区激情视频| 日韩久久一区| 新版的欧美在线视频| 一区三区视频| 国产精品久久久久久久免费软件| 日本黄色精品| 日韩专区欧美专区| 精品国产一区二区三区av片| 欧美+日本+国产+在线a∨观看| 亚洲我射av| 精品网站aaa| 香蕉久久久久久久av网站| 国产精品啊啊啊| 亚洲免费观看| 国内不卡的一区二区三区中文字幕| 婷婷综合亚洲| 美女精品一区二区| 国产精品普通话对白| 国产精品v一区二区三区| 在线看片不卡| 欧美精品不卡| 亚洲中午字幕| 国产欧洲在线| 日本aⅴ亚洲精品中文乱码 | 亚洲无线观看| 婷婷综合六月| 国产欧美日韩精品一区二区三区 | 最新日韩欧美| 成人在线免费观看网站| 综合激情在线| 亚洲伦乱视频| 国产午夜久久av| 国产毛片一区| 日本综合字幕| 国产精品成人3p一区二区三区| 美日韩精品视频| 88xx成人免费观看视频库| 国产精品黄色片| 日韩精品一二三| 香蕉成人av| 久久爱www.| 日韩和欧美一区二区三区| 欧美日韩在线播放视频| 精品三级久久久| 97精品国产99久久久久久免费| 亚洲激情不卡| 日韩一区二区在线免费| 欧美激情视频一区二区三区在线播放| 蜜桃视频一区二区三区在线观看| 久久久久久久久丰满| 精品国产亚洲日本| 97久久亚洲| 蜜臀av一区二区在线免费观看| 欧美成人综合| 日韩av福利| 国产一区二区三区不卡视频网站| 国产精品一区二区中文字幕| 亚洲麻豆一区| 西西人体一区二区| 亚洲手机在线| 日韩欧美一区二区三区在线视频| 国产日韩高清一区二区三区在线 | 国产精品人人爽人人做我的可爱| 四虎影视精品| 精品久久网站| 久久麻豆视频| 国产美女视频一区二区| 六月婷婷一区| 香蕉国产精品| 国产国产精品| 欧美亚洲国产精品久久| 亚洲天堂一区二区| 在线人成日本视频| 日韩成人免费| 国产成人久久精品一区二区三区| 国产精品一二| 国产剧情一区| 国产极品一区| 欧美韩一区二区| 美女视频黄免费的久久| 美女视频黄久久| 国产一区丝袜| 特黄毛片在线观看| 在线日韩一区| 亚洲一区二区三区四区五区午夜| 午夜欧美精品久久久久久久| 日韩视频免费| 在线综合亚洲| 蜜臀精品一区二区三区在线观看| 亚洲免费在线| 中文字幕一区二区三区日韩精品 | 国产精品av久久久久久麻豆网| 久久精品中文| 尤物在线精品| 婷婷综合成人| 国产精品视频一区二区三区 | 久久国产视频网| 免费亚洲婷婷| 老牛影视精品| 午夜久久黄色| 日韩中文字幕无砖| 国产精品第一国产精品| 四虎国产精品免费观看| 久久国产主播| 伊人国产精品| 久久亚洲精精品中文字幕| 日韩综合精品| 1024精品一区二区三区| 亚洲我射av| 免费日韩一区二区三区| 日韩深夜视频| 欧美精选一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 青草久久视频| 天堂а√在线最新版中文在线| 好看不卡的中文字幕| 日本综合视频| 老司机精品在线| 国精品一区二区| 亚欧洲精品视频在线观看| 国产极品一区| 91精品91| 国产午夜久久av| 久久久久久久久久久妇女| 在线国产精品一区| 黄色精品视频| 亚洲一区日韩在线| 国产精品亚洲二区| 激情综合在线| 国产日韩欧美中文在线| 久久人人97超碰国产公开结果| 视频一区国产视频| 麻豆一区二区三| 激情91久久| 欧美激情综合| 国产视频一区欧美| 精品国产三区在线| 每日更新成人在线视频| 免费在线观看一区| 国产免费成人| 国产成人免费| 国产免费成人| 精品国产中文字幕第一页| av不卡在线看| 精品国产鲁一鲁****| 西西人体一区二区| 成人亚洲精品| 蜜桃91丨九色丨蝌蚪91桃色| 国产一区二区三区四区| 性色av一区二区怡红| 国产中文在线播放| 88久久精品| 91精品高清| 精品国产黄a∨片高清在线| 综合精品一区| 亚洲一级黄色| 麻豆高清免费国产一区| 另类激情亚洲| 久久天堂成人| 国内精品伊人|