ZMQ 디바이스를 사용하여 네트워크를 확장하는 예를 살펴본 적이 있었는데, zmq.device()
는 이제 deprecated 되었고 대신에 zmq.proxy()
를 사용하라는 내용을 공식문서에서 보게 되었다. 단지 device
에서 proxy
로 이름이 바뀐 것인가 싶었는데, 프록시는 zmq 디바이스보다 좀 더 오픈되고 유연한 형태의 네트워크 중계 장치이며, 사용도 더 간편하기 때문에 소개하고자 한다.
[태그:] zmq
ZMQ + Asyncio : PUB-SUB 예제
PUB-SUB 패턴의 예제를 asyncio 버전으로 바꾼 예제이다.
ZMQ + Asyncio : PUB-SUB 예제 더보기ZMQ + Asyncio 적용하기
파이썬에서 ZMQ를 사용할 때, asyncio를 사용할 수 있게 되었다. asyncio에 적용한다고 해서 크게 달라지는 것은 없고 소켓의 사용방법은 대동소이하다. (실제 IO 시점에 작업 전환이 일어날 수 있게 await를 붙이는 것 정도의 차이만 있다. 대략의 사용법을 정리해보면 다음과 같다.
ZMQ + Asyncio 적용하기 더보기예제 – ZMQ + Asyncio 로 PUSH-PULL 구성
PUSH-PULL 구조를 사용한 분산처리를 구현한 예제를 asyncio 버전으로 재작성해보았다. 벤틸레이터가 보내는 값에 대해 각각의 워커는 그 값에 해당하는 시간만큼 지연시킨 후 싱크에게 짝/홀수 여부값을 전송한다.
예제 – ZMQ + Asyncio 로 PUSH-PULL 구성 더보기ZMQ 예제 – Poller를 사용하여 종료 시점을 동기화하기
하나의 ZMQ 소켓은 여러 포트에 바인드하거나 커넥트할 수 있어서, 1:N의 연결을 쉽게 구성할 수 있습니다. 하지만 어떤 경우에는 이 다중 접속이 두 개 이상의 소켓을 사용하는 경우도 있습니다. 이런 경우 두 개의 소켓을 동시에 듣는 방법이 필요합니다. ZMQ소켓의 recv() 메소드는 블럭킹 함수이기 때문에 2개 이상의 소켓 중 데이터가 들어온 소켓을 처리하기 위해서는 소켓만으로는 처리할 수 없습니다. ZMQ는 이런 상황에 사용할 수 있는 Poller라는 수단을 제공합니다.
ZMQ 예제 – Poller를 사용하여 종료 시점을 동기화하기 더보기