diff --git a/devices/clients/sst_client.py b/devices/clients/sst_client.py index ed542159c2668ff11b7afcb5b91dfc898e5c5947..a53c849b26a18d4fcb35d7ee5518c17f365240ae 100644 --- a/devices/clients/sst_client.py +++ b/devices/clients/sst_client.py @@ -2,7 +2,7 @@ from threading import Thread import socket from util.comms_client import CommClient -from collections import deque +from queue import Queue import numpy import logging @@ -45,15 +45,15 @@ class sst_client(CommClient): Function used to connect to the client. """ if not self.connected: - self.deque = deque(maxlen=1024) - self.udp = UDP_Receiver(self.host, self.port, self.deque, self.streams, self.buffersize, self.timeout) - self.sst = SST(self.deque, self.streams) + self.queue = Queue(maxsize=1024) + self.udp = UDP_Receiver(self.host, self.port, self.queue, self.streams, self.buffersize, self.timeout) + self.sst = SST(self.queue, self.streams) return super().connect() def disconnect(self): del self.udp del self.sst - del self.deque + del self.queue return super().disconnect() @@ -103,10 +103,10 @@ class UDP_Receiver(Thread): This class provides a small wrapper for the OPC ua read/write functions in order to better organise the code """ - def __init__(self, host, port, deque, streams, buffersize=9000, timeout=0.1): + def __init__(self, host, port, queue, streams, buffersize=9000, timeout=0.1): self.streams = streams - self.deque = deque + self.queue = queue self.host = host self.port = port self.buffersize = buffersize @@ -130,7 +130,7 @@ class UDP_Receiver(Thread): try: packet = [bytearray(self.buffersize)] self.sock.recvmsg_into(packet[0:self.buffersize]) - self.deque.append(packet) + self.queue.put_nowait(packet) except socket.timeout: pass @@ -141,10 +141,10 @@ class UDP_Receiver(Thread): class SST(Thread): - def __init__(self, deque, streams): + def __init__(self, queue, streams): self.streams = streams - self.deque = deque + self.queue = queue self.last_packet = None self.parameters = { @@ -160,17 +160,17 @@ class SST(Thread): while True: - if len(self.deque) > 0: - packet = self.deque.popleft() - if packet is None: - self.deque.clear() - break + packet = self.queue.get() - self.process_packet(packet) + if packet is None: + self.queue.clear() + break + + self.process_packet(packet) def __del__(self): - self.deque.appendleft(None) + self.queue.put(None) self.join() def process_packet(self, packet):