예제 #1
0
    def run(self):
        gson = Gson()

        # Initialize a zeromq context
        context = ZMQ.context(1)

        #print('{}> Trying to connect...'.format(wrk_num))

        # Set up a channel to receive work from the ventilator
        work_receiver = context.socket(ZMQ.PULL)
        work_receiver.connect("tcp://127.0.0.1:5557")

        # Set up a channel to send result of work to the results reporter
        results_sender = context.socket(ZMQ.PUSH)
        results_sender.connect("tcp://127.0.0.1:5558")

        # Set up a channel to receive control messages over
        control_receiver = context.socket(ZMQ.SUB)
        control_receiver.connect("tcp://127.0.0.1:5559")
        control_receiver.subscribe("")

        # Set up a poller to multiplex the work receiver and control receiver channels
        poller = context.poller(2)
        poller.register(work_receiver, ZMQ.Poller.POLLIN)
        poller.register(control_receiver, ZMQ.Poller.POLLIN)

        # Loop and accept messages from both channels, acting accordingly
        while True:
            poller.poll()

            # If the message came from work_receiver channel, square the number
            # and send the answer to the results reporter
            #if socks.get(work_receiver) == zmq.POLLIN:
            if poller.pollin(0):
                msg = work_receiver.recv(0)
                msg = msg.tostring()
                work_message = gson.fromJson(msg, HashMap)
                num = work_message.get('num')
                product = num * num
                answer_message = HashMap()
                answer_message.put('worker', self.wrk_num)
                answer_message.put('result', product)
                answer_message.put('input', num)
                msg = gson.toJson(answer_message)
                results_sender.send(msg, 0)

            # If the message came over the control channel, shut down the worker.
            #if socks.get(control_receiver) == zmq.POLLIN:
            if poller.pollin(1):
                msg = control_receiver.recv(0)
                control_message = msg.tostring()
                if control_message == "FINISHED":
                    #print("{}> Received FINSHED, quitting!".format(wrk_num))
                    break
예제 #2
0
class Response(object):

    def __init__(self,status,data=None):
        # convert data to Java Map
        self.data = data
        #self.mapper = ObjectMapper()
        self.status = status
        self.gson = Gson()

    def to_json(self,return_data):
        if return_data is True:
            data = self.data
            # or writeValueAsBytes() to serialize to a byte array
            response = dict(status=self.status,results=self.data)
            #writer = self.mapper.writer()
            #json = writer.writeValueAsString(response)
            json = self.gson.toJson(response)
        else:
            json = str(self.status)
        return json