ZMQ 프록시 사용하기

ZMQ 디바이스를 사용하여 네트워크를 확장하는 예를 살펴본 적이 있었는데, zmq.device()는 이제 deprecated 되었고 대신에 zmq.proxy()를 사용하라는 내용을 공식문서에서 보게 되었다. 단지 device에서 proxy로 이름이 바뀐 것인가 싶었는데, 프록시는 zmq 디바이스보다 좀 더 오픈되고 유연한 형태의 네트워크 중계 장치이며, 사용도 더 간편하기 때문에 소개하고자 한다.

ZMQ 프록시 사용하기 더보기

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를 사용하여 종료 시점을 동기화하기 더보기