@@ -152,7 +152,7 class OperationConf(ConfBase): | |||
|
152 | 152 | |
|
153 | 153 | className = eval(self.name) |
|
154 | 154 | |
|
155 | if 'Plot' in self.name or 'Writer' in self.name: | |
|
155 | if 'Plot' in self.name or 'Writer' in self.name or 'Send' in self.name: | |
|
156 | 156 | kwargs = self.getKwargs() |
|
157 | 157 | opObj = className(self.id, self.id, self.project_id, self.err_queue, **kwargs) |
|
158 | 158 | opObj.start() |
@@ -1109,8 +1109,8 class PlotterData(object): | |||
|
1109 | 1109 | Object to hold data to be plotted |
|
1110 | 1110 | ''' |
|
1111 | 1111 | |
|
1112 |
MAXNUMX = |
|
|
1113 |
MAXNUMY = |
|
|
1112 | MAXNUMX = 200 | |
|
1113 | MAXNUMY = 200 | |
|
1114 | 1114 | |
|
1115 | 1115 | def __init__(self, code, throttle_value, exp_code, buffering=True, snr=False): |
|
1116 | 1116 | |
@@ -1332,9 +1332,10 class PlotterData(object): | |||
|
1332 | 1332 | data = self.roundFloats( |
|
1333 | 1333 | self.data[self.key][::, ::dx, ::dy].tolist()) |
|
1334 | 1334 | else: |
|
1335 | data = self.roundFloats(self.data[self.key][tm].tolist()) | |
|
1336 | 1335 | if self.key is 'noise': |
|
1337 | data = [[x] for x in data] | |
|
1336 | data = [[x] for x in self.roundFloats(self.data[self.key][tm].tolist())] | |
|
1337 | else: | |
|
1338 | data = self.roundFloats(self.data[self.key][tm][::, ::dy].tolist()) | |
|
1338 | 1339 | |
|
1339 | 1340 | meta = {} |
|
1340 | 1341 | ret = { |
@@ -5,6 +5,7 import zmq | |||
|
5 | 5 | import time |
|
6 | 6 | import numpy |
|
7 | 7 | import datetime |
|
8 | from queue import Queue | |
|
8 | 9 | from functools import wraps |
|
9 | 10 | from threading import Thread |
|
10 | 11 | import matplotlib |
@@ -160,9 +161,10 class Plot(Operation): | |||
|
160 | 161 | self.isConfig = False |
|
161 | 162 | self.isPlotConfig = False |
|
162 | 163 | self.save_counter = 1 |
|
163 |
self.sender_ |
|
|
164 | self.sender_time = 0 | |
|
164 | 165 | self.data = None |
|
165 | 166 | self.firsttime = True |
|
167 | self.sender_queue = Queue(maxsize=10) | |
|
166 | 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 | 170 | def __fmtTime(self, x, pos): |
@@ -225,7 +227,7 class Plot(Operation): | |||
|
225 | 227 | self.throttle = kwargs.get('throttle', 0) |
|
226 | 228 | self.exp_code = kwargs.get('exp_code', None) |
|
227 | 229 | self.plot_server = kwargs.get('plot_server', False) |
|
228 |
self.sender_period = kwargs.get('sender_period', |
|
|
230 | self.sender_period = kwargs.get('sender_period', 60) | |
|
229 | 231 | self.height_index = kwargs.get('height_index', None) |
|
230 | 232 | self.__throttle_plot = apply_throttle(self.throttle) |
|
231 | 233 | self.data = PlotterData( |
@@ -564,44 +566,47 class Plot(Operation): | |||
|
564 | 566 | ''' |
|
565 | 567 | ''' |
|
566 | 568 | |
|
567 | if self.sender_counter < self.sender_period: | |
|
568 |
|
|
|
569 | interval = self.data.tm - self.sender_time | |
|
570 | if interval < self.sender_period: | |
|
569 | 571 | return |
|
570 | 572 | |
|
571 |
self.sender_ |
|
|
572 | self.data.meta['titles'] = self.titles | |
|
573 | retries = 2 | |
|
573 | self.sender_time = self.data.tm | |
|
574 | ||
|
575 | attrs = ['titles', 'zmin', 'zmax', 'colormap'] | |
|
576 | for attr in attrs: | |
|
577 | value = getattr(self, attr) | |
|
578 | if value is not None: | |
|
579 | self.data.meta[attr] = getattr(self, attr) | |
|
580 | self.data.meta['interval'] = int(interval) | |
|
581 | msg = self.data.jsonify(self.plot_name, self.plot_type) | |
|
582 | self.sender_queue.put(msg) | |
|
583 | ||
|
574 | 584 | while True: |
|
575 | 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()) | |
|
576 | 588 | socks = dict(self.poll.poll(5000)) |
|
577 | 589 | if socks.get(self.socket) == zmq.POLLIN: |
|
578 | 590 | reply = self.socket.recv_string() |
|
579 | 591 | if reply == 'ok': |
|
580 | 592 | log.log("Response from server ok", self.name) |
|
581 |
|
|
|
593 | time.sleep(0.1) | |
|
594 | continue | |
|
582 | 595 | else: |
|
583 | 596 | log.warning( |
|
584 | 597 | "Malformed reply from server: {}".format(reply), self.name) |
|
585 | ||
|
586 | 598 | else: |
|
587 | 599 | log.warning( |
|
588 | 600 | "No response from server, retrying...", self.name) |
|
601 | self.sender_queue.put(msg) | |
|
589 | 602 | self.socket.setsockopt(zmq.LINGER, 0) |
|
590 | 603 | self.socket.close() |
|
591 | 604 | self.poll.unregister(self.socket) |
|
592 | retries -= 1 | |
|
593 | if retries == 0: | |
|
594 | log.error( | |
|
595 | "Server seems to be offline, abandoning", self.name) | |
|
596 | self.socket = self.context.socket(zmq.REQ) | |
|
597 | self.socket.connect(self.plot_server) | |
|
598 | self.poll.register(self.socket, zmq.POLLIN) | |
|
599 | time.sleep(1) | |
|
600 | break | |
|
605 | time.sleep(0.1) | |
|
601 | 606 | self.socket = self.context.socket(zmq.REQ) |
|
602 | 607 | self.socket.connect(self.plot_server) |
|
603 | 608 | self.poll.register(self.socket, zmq.POLLIN) |
|
604 | time.sleep(0.5) | |
|
609 | break | |
|
605 | 610 | |
|
606 | 611 | def setup(self): |
|
607 | 612 | ''' |
General Comments 0
You need to be logged in to leave comments.
Login now