1 """Majordomo Protocol Worker API, Python version 3 Implements the MDP/Worker spec at http:#rfc.zeromq.org/spec:7. 5 Author: Min RK <benjaminrk@gmail.com> 6 Based on Java example by Arkadiusz Orzechowski 8 Originally from Zguide examples, generalized to use CLIENT 9 or DEALER following Generaldomo Protocol. brett.viren@gmail.com 16 from .zhelpers
import dump, clientish_recv, clientish_send
21 """Generaldomo Protocol Worker API, Python version 23 Implements the MDP/Worker spec at http:#rfc.zeromq.org/spec:7. 24 Extended as described in https://brettviren.github.io/generaldomo/ 27 HEARTBEAT_LIVENESS = 3
48 def __init__(self, broker, service, socket_type=zmq.DEALER, verbose=False):
53 self.
ctx = zmq.Context()
55 logging.basicConfig(format=
"%(asctime)s %(message)s",
56 datefmt=
"%Y-%m-%d %H:%M:%S",
62 """Connect or reconnect to broker""" 71 logging.info(
"I: connecting to broker at %s...", self.
broker)
82 """Send message to broker. 84 If no msg is provided, creates one internally 88 elif not isinstance(msg, list):
95 msg = [MDP.W_WORKER, command] + msg
97 logging.info(
"I: sending %s to broker", command)
104 """Send reply, if any, to broker and wait for next request.""" 108 if reply
is not None:
110 reply = [self.
reply_to, b
''] + reply
119 except KeyboardInterrupt:
126 logging.info(
"I: received message from broker: ")
134 assert header == MDP.W_WORKER
137 if command == MDP.W_REQUEST:
146 elif command == MDP.W_HEARTBEAT:
149 elif command == MDP.W_DISCONNECT:
152 logging.error(
"E: invalid input message: ")
159 logging.warn(
"W: disconnected from broker - retrying...")
162 except KeyboardInterrupt:
171 logging.warn(
"W: interrupt received, killing worker...")
def clientish_recv(sock, args, kwds)
def __init__(self, broker, service, socket_type=zmq.DEALER, verbose=False)
def clientish_send(sock, msg, args, kwds)
def send_to_broker(self, command, option=None, msg=None)
int poll(zmq_pollitem_t *items_, size_t nitems_, long timeout_=-1)
def reconnect_to_broker(self)
void dump(const SM &) noexcept
def recv(self, reply=None)