Python 2.7Python Pyserial - Threading
Dies ist der Code, den ich habe. Kannst du mir bitte sagen was falsch ist? Das ist das Biest, das ich mir vorstellen konnte, nachdem ich mehr als zwei Tage lang kontinuierlich Threading studiert hatte.
Die serielle Kommunikation funktioniert, wenn ich Threading nicht verwende.
import threading
import time
import sys
import serial
import os
import time
def Task1(ser):
while 1:
print "Inside Thread 1"
ser.write('\x5A\x03\x02\x02\x02\x09') # Byte ArrayTo Control a MicroProcessing Unit
b = ser.read(7)
print b.encode('hex')
print "Thread 1 still going on"
time.sleep(1)
def Task2(ser):
print "Inside Thread 2"
print "I stopped Task 1 to start and execute Thread 2"
ser.write('x5A\x03\x02\x08\x02\x0F')
c = ser.read(7)
print c.encode('hex')
print "Thread 2 complete"
def Main():
ser = serial.Serial(3, 11520)
t1 = threading.Thread(target = Task1, args=[ser])
t2 = threading.Thread(target = Task2, args=[ser])
print "Starting Thread 1"
t1.start()
print "Starting Thread 2"
t2.start()
print "=== exiting ==="
ser.close()
if __name__ == '__main__':
Main()
ich am Schloss sah man vorgeschlagen. Wenn t1 eine Sperre erwirbt, hat sie diese für immer, da es sich um eine While-Schleife handelt - es gibt keine Möglichkeit, sie zu entsperren. Irgendwelche Ideen, wie man es umgehen kann? t1 - ist ein langes Verarbeitungsereignis, während gleichzeitig andere Ereignisse wie t2 passieren –
Eine Sperre kann erworben und freigegeben werden. Wenn Sie die Sperre vor der Verwendung von ser erhalten und sie danach wieder freigeben, lässt sie viel Zeit (z. B. während des Schlafs von Aufgabe 1) für andere Aufgaben, um ser zu verwenden. – Julien
@Julien Dies ist der Fehler, den ich bekam: Traceback (jüngste Aufforderung zuletzt): Datei "C: \ Python27 \ lib \ threading.py", Linie 801, in __bootstrap_inner self.run() Datei „C : \ Python27 \ lib \ threading.py ", Zeile 754, im Lauf self .__ target (* selbst .__ args, ** self .__ kwargs) Datei" C:/Benutzer/kundemj/Desktop/Produktion GUI/Test python Codes /test19.py ", Zeile 15, in Task1 b = ser.read (7) Datei" C: \ Python27 \ lib \ Site-Pakete \ seriell \ serialwin32.py ", Zeile 252, in lesen auslösen SerialException ('call to ClearCommError fehlgeschlagen') SerialException: Aufruf von ClearCommError fehlgeschlagen –