Ich habe einen Producer-Thread, der Daten von einer seriellen Verbindung erzeugt und sie in mehrere Warteschlangen einfügt, die von verschiedenen Consumer-Threads verwendet werden. Ich möchte jedoch zusätzliche Warteschlangen (zusätzliche Konsumenten) aus dem Hauptthread hinzufügen können, nachdem der Produzententhread bereits gestartet wurde.Wie kann man in einem laufenden Thread in Python eine Methode ändern oder aufrufen?
I.e. Wie kann ich im folgenden Code eine Warteschlange zu listOfQueues aus dem Hauptthread hinzufügen, während dieser Thread ausgeführt wird? Kann ich eine Methode wie addQueue (newQueue) zu dieser Klasse hinzufügen, die daran anfügt listOfQueues? Dies scheint nicht wahrscheinlich, da der Thread in der Run-Methode sein wird. Kann ich eine Art Ereignis ähnlich dem Stop-Ereignis erstellen?
class ProducerThread(threading.Thread):
def __init__(self, listOfQueues):
super(ProducerThread, self).__init__()
self.listOfQueues = listOfQueues
self._stop_event = threading.Event() # Flag to be set when the thread should stop
def run(self):
ser = serial.Serial() # Some serial connection
while(not self.stopped()):
try:
bytestring = ser.readline() # Serial connection or "producer" at some rate
for q in self.listOfQueues:
q.put(bytestring)
except serial.SerialException:
continue
def stop(self):
'''
Call this function to stop the thread. Must also use .join() in the main
thread to fully ensure the thread has completed.
:return:
'''
self._stop_event.set()
def stopped(self):
'''
Call this function to determine if the thread has stopped.
:return: boolean True or False
'''
return self._stop_event.is_set()
Sie haben das 'self. in' q in listOfQueues: 'verpasst. – 101