@@ -5,6 +5,7 import zmq | |||||
5 | import time |
|
5 | import time | |
6 | import numpy |
|
6 | import numpy | |
7 | import datetime |
|
7 | import datetime | |
|
8 | from queue import Queue | |||
8 | from functools import wraps |
|
9 | from functools import wraps | |
9 | from threading import Thread |
|
10 | from threading import Thread | |
10 | import matplotlib |
|
11 | import matplotlib | |
@@ -163,6 +164,7 class Plot(Operation): | |||||
163 | self.sender_time = 0 |
|
164 | self.sender_time = 0 | |
164 | self.data = None |
|
165 | self.data = None | |
165 | self.firsttime = True |
|
166 | self.firsttime = True | |
|
167 | self.sender_queue = Queue(maxsize=10) | |||
166 | self.plots_adjust = {'left': 0.125, 'right': 0.9, 'bottom': 0.15, 'top': 0.9, 'wspace': 0.2, 'hspace': 0.2} |
|
168 | self.plots_adjust = {'left': 0.125, 'right': 0.9, 'bottom': 0.15, 'top': 0.9, 'wspace': 0.2, 'hspace': 0.2} | |
167 |
|
169 | |||
168 | def __fmtTime(self, x, pos): |
|
170 | def __fmtTime(self, x, pos): | |
@@ -570,42 +572,41 class Plot(Operation): | |||||
570 |
|
572 | |||
571 | self.sender_time = self.data.tm |
|
573 | self.sender_time = self.data.tm | |
572 |
|
574 | |||
573 | attrs = ['titles', 'zmin', 'zmax'] |
|
575 | attrs = ['titles', 'zmin', 'zmax', 'colormap'] | |
574 | for attr in attrs: |
|
576 | for attr in attrs: | |
575 |
|
|
577 | value = getattr(self, attr) | |
|
578 | if value is not None: | |||
|
579 | self.data.meta[attr] = getattr(self, attr) | |||
576 | self.data.meta['interval'] = int(interval) |
|
580 | self.data.meta['interval'] = int(interval) | |
577 | retries = 2 |
|
581 | msg = self.data.jsonify(self.plot_name, self.plot_type) | |
|
582 | self.sender_queue.put(msg) | |||
|
583 | ||||
578 | while True: |
|
584 | while True: | |
579 | self.socket.send_string(self.data.jsonify(self.plot_name, self.plot_type)) |
|
585 | if self.sender_queue.empty(): | |
|
586 | break | |||
|
587 | self.socket.send_string(self.sender_queue.get()) | |||
580 | socks = dict(self.poll.poll(5000)) |
|
588 | socks = dict(self.poll.poll(5000)) | |
581 | if socks.get(self.socket) == zmq.POLLIN: |
|
589 | if socks.get(self.socket) == zmq.POLLIN: | |
582 | reply = self.socket.recv_string() |
|
590 | reply = self.socket.recv_string() | |
583 | if reply == 'ok': |
|
591 | if reply == 'ok': | |
584 | log.log("Response from server ok", self.name) |
|
592 | log.log("Response from server ok", self.name) | |
585 |
|
|
593 | time.sleep(0.1) | |
|
594 | continue | |||
586 | else: |
|
595 | else: | |
587 | log.warning( |
|
596 | log.warning( | |
588 | "Malformed reply from server: {}".format(reply), self.name) |
|
597 | "Malformed reply from server: {}".format(reply), self.name) | |
589 |
|
||||
590 | else: |
|
598 | else: | |
591 | log.warning( |
|
599 | log.warning( | |
592 | "No response from server, retrying...", self.name) |
|
600 | "No response from server, retrying...", self.name) | |
|
601 | self.sender_queue.put(msg) | |||
593 | self.socket.setsockopt(zmq.LINGER, 0) |
|
602 | self.socket.setsockopt(zmq.LINGER, 0) | |
594 | self.socket.close() |
|
603 | self.socket.close() | |
595 | self.poll.unregister(self.socket) |
|
604 | self.poll.unregister(self.socket) | |
596 | retries -= 1 |
|
605 | time.sleep(0.1) | |
597 | if retries == 0: |
|
|||
598 | log.error( |
|
|||
599 | "Server seems to be offline, abandoning", self.name) |
|
|||
600 | self.socket = self.context.socket(zmq.REQ) |
|
|||
601 | self.socket.connect(self.plot_server) |
|
|||
602 | self.poll.register(self.socket, zmq.POLLIN) |
|
|||
603 | time.sleep(1) |
|
|||
604 | break |
|
|||
605 | self.socket = self.context.socket(zmq.REQ) |
|
606 | self.socket = self.context.socket(zmq.REQ) | |
606 | self.socket.connect(self.plot_server) |
|
607 | self.socket.connect(self.plot_server) | |
607 | self.poll.register(self.socket, zmq.POLLIN) |
|
608 | self.poll.register(self.socket, zmq.POLLIN) | |
608 | time.sleep(0.5) |
|
609 | break | |
609 |
|
610 | |||
610 | def setup(self): |
|
611 | def setup(self): | |
611 | ''' |
|
612 | ''' |
General Comments 0
You need to be logged in to leave comments.
Login now