Python 네트워크 프로 그래 밍 의 ZeroMQ 지식 총화
8469 단어 PythonZeroMQ네트워크 프로 그래 밍
요약:Ø MQ(ZeroMQ)는 메시지 큐 를 기반 으로 하 는 다 중 스 레 드 네트워크 라 이브 러 리 로 네트워크 통신,메시지 큐,스 레 드 스케줄 링 등 기능 을 패키지 하여 상부 에 간결 한 API 를 제공 합 니 다.응용 프로그램 은 라 이브 러 리 파일 을 불 러 오고 API 함 수 를 호출 하여 고성능 네트워크 통신 을 실현 합 니 다.
추상 적 으로 보인다.다음은 ZeroMQ 의 Python 패키지 인 pyzmp 와 결합 하여 ZeroMQ 의 가장 기본 적 인 작업 모델 세 가 지 를 실례 로 살 펴 보 자.
설치
설치 방법
pip install pyzmq
설치 성공 여부 확인
>>> import zmq
>>> print(zmq.__version__)
22.0.3
3.Request-reply(요청 응답 모드)3.1 Request-Reply 모드 개요:
3.2 클 라 이언 트 단 python 구현
#client.py
import zmq
context = zmq.Context()
# Socket to talk to server
print("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 서버 엔 드 python 구현
#server.py
import time
import zmq
context = 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")
python client.py
Connecting to hello world server…
Received reply [ b'World' ]
python server.py
Received request: b'Hello'
client.py 를 몇 개 더 실행 해서 상황 이 어떤 지 볼 수 있 습 니 다.4.게시/구독(구독-게시 모드)
4.1 Pub-Subs 모델 개요:
공식 문서 의 예 를 직접 참조 합 니 다.
게시 자:날씨 업데이트 서버 와 유사 하여 구독 자 에 게 날씨 업 데 이 트 를 보 냅 니 다.내용 은 우편 번호,온도,습도 등 정 보 를 포함 합 니 다.
#Publisher.py
import zmq
from random import randrange
context = 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 sys
import zmq
# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)
print("Collecting updates from weather server...")
socket.connect("tcp://localhost:5556")
# Subscribe to zipcode, default is NYC, 10001
zip_filter = sys.argv[1] if len(sys.argv) > 1 else "10001"
# Python 2 - ascii bytes to unicode str
if isinstance(zip_filter, bytes):
zip_filter = zip_filter.decode('ascii')
socket.setsockopt_string(zmq.SUBSCRIBE, zip_filter)
# Process 5 updates
total_temp = 0
for 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))
)
5.Push/Pull(라인 모드)
5.1 유수 선 모드 개요:
ventilator 는 SOCKET 를 사용 합 니 다.PUSH,Worker 노드 에 작업 을 나 누 어 줍 니 다.Worker 노드 에서 SOCKET 사용PULL 상류 에서 퀘 스 트 를 받 고 SOCKET 사용PUSH 는 결 과 를 Sink 에 모 았 습 니 다.주의해 야 할 것 은 임 무 를 나 눠 줄 때 도 부하 균형 을 이 루 는 경로 기능 이 있다 는 점 이다.워 커 는 언제든지 자 유 롭 게 가입 할 수 있 고,ventilator 는 임 무 를 균형 있 게 나 눠 줄 수 있다.
Push/Pull 모드 는 자주 사용 되 는데,여기 서 우 리 는 주로 그것 의 부하 균형 을 테스트 합 니 다.
5.2 Ventilator
# ventilator.py
import zmq
import time
context = 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.py
import zmq
context = 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.py
import zmq
import sys
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://*:5558")
while True:
response = socket.recv()
print("response: %s" % response)
터미널 4 개 를 열 고 각각 실행 합 니 다.
python sink.py
python worker.py
python worker.py
python ventilator.py
총화
메시지 모델 은 수요 에 따라 조합 하여 사용 할 수 있 고 후속 적 인 대리 모델 과 경로 모델 등 은 모두 세 가지 기본 모델 에서 의 확장 이나 변이 이다.
파 이 썬 네트워크 프로 그래 밍 의 ZeroMQ 지식 총화 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 ZeroMQ 지식 총화 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.