Python 2.7Python Pyserial - 線程
這是我的代碼。你能告訴我什麼是錯的。這是連續研究線索兩天後我可以想到的野獸。
當我不使用線程時,串行通信工作。
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()
我看着你建議的鎖。假設t1獲得鎖定,它將永遠保留它,因爲它是一個while循環 - 無法解鎖它。有關如何解決它的任何想法? t1 - 是一個很長的處理事件,同時像t2這樣的其他事件發生。 –
鎖可以被獲取並釋放。如果在使用ser之前獲得鎖定並釋放它,它會讓大量時間(例如,在任務1的睡眠期間)到其他任務使用ser。 – Julien
@Julien這是我得到的錯誤: 回溯(最近通話最後一個): 文件 「C:\ Python27 \ LIB \ threading.py」,線路801,在__bootstrap_inner self.run() 文件「C :\ Python27 \ lib \ threading.py「,行754,正在運行 self .__ target(* self .__ args,** self .__ kwargs) 文件」C:/ Users/kundemj/Desktop/Production GUI/Trial python Codes /test19.py「,第15行,在Task1中 b = ser.read(7) 文件」C:\ Python27 \ lib \ site-packages \ serial \ serialwin32.py「,第252行,在讀 raise SerialException '調用ClearCommError失敗') SerialException:調用ClearCommError失敗 –