python zeromq poll


以下のように実施されると、メッセージが受信されたときにのみメッセージ処理が実行される."q"のメッセージを受け取ることができて、mainloopは終わります.socket.close()が必要かどうか分かりません.
import time 
import zmq 

context = zmq.Context() 
socket = context.socket(zmq.SUB) 
socket.connect("tcp://localhost:5555") 
t0 = time.time()
socket.subscribe("")

poller = zmq.Poller()
poller.register(socket, zmq.POLLIN)
t_prev = time.time()

while True: # Wait for next request from client 
    t = time.time()
    socks = dict(poller.poll(0.1))
    if socket in socks:
        msg = socket.recv().decode()
        print(msg)
        if msg == 'q':
            break

    t_prev = t
socket.close()