I am writing an application to collect UDP messages and process them every 1sec.
Application prototype looks like:
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
import threading
import time
class UdpListener(DatagramProtocol):
    messages = []
    def datagramReceived(self, data, (host, port)):
        self.messages.append(data)
class Messenger(threading.Thread):
    listener = None
    def __init__(self):
        threading.Thread.__init__(self)
    def run(self):
        while True:
            time.sleep(1)
            recivedMessages = self.listener.messages
            length = len(recivedMessages)
            messagesToProccess = recivedMessages[0:length]
            #doSomethingWithMessages(messagesToProccess)
            del self.listener.messages[0:length]
            print(length)
listener = UdpListener()
messenger = Messenger()
messenger.listener = listener
messenger.start()
reactor.listenUDP(5556, listener)
reactor.run()
I am not sure if I can easily remove beginning values from list (del self.listener.messages[0:length]) without any risk that incoming message changes list and application crashes.
Update - version with lock
class Messenger(threading.Thread):
listener = None
lock = threading.Lock()
def __init__(self):
    threading.Thread.__init__(self)
def run(self):
    while True:
        time.sleep(1)
        recivedMessages = self.listener.messages
        self.lock.acquire()
        try:
            length = len(recivedMessages)
            messagesToProccess = recivedMessages[0:length]
            del self.listener.messages[0:length]
        except Exception as e:
            raise e
        finally:
            self.lock.release()
        #doSomethingWithMessages(messagesToProccess)
        print(length)
 
     
     
    