任何人都可以請給我一個關於如何使用pyserial通信線程的小而簡單的例子。 我google搜索了三天,我還是illeterate,我甚而不具有整合兩者的代碼工作片使用線程的pyserial的小例子
基本上我的目標在這種情況下使用線程:
有串行通信從MCU繼續進行到一定的值(比如A)。
停止達到A值 - 然後達到B值...並再次開始連續達到A值。
你可以在這裏找到一些基本的代碼。
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()
請清理你的縮進,因爲它實際上是在Python重要... – Andy
所以對於初學者您在thread2中發表評論說「我停止了任務1」,但是你沒有。此外,由於您不會與您的線程「加入」,因此您很可能在線程啓動之前立即關閉串口ser.close()。 – Andy
@Andy編輯你能否給我一個代碼片段。我明白你說了什麼,但我不知道如何阻止一個線程。我有另一個鎖 - 但它也失敗了。我沒有使用t1.join(),因爲當t1仍在使用時,我應該能夠退出主程序。 –