40

私はこのようなシリアルデータを読んでいます:

connected = False
port = 'COM4'
baud = 9600

ser = serial.Serial(port, baud, timeout=0)

while not connected:
    #serin = ser.read()
    connected = True

    while True:
        print("test")
        reading = ser.readline().decode()

問題は、Bottle py Web フレームワークを含む他のすべての実行を妨げることです。追加しsleep()ても役に立ちません。

"while True"" を "while ser.readline():" に変更すると、"test" が出力されません。これは、Python 2.7 で機能していたため、奇妙です。何が間違っている可能性がありますか?

理想的には、シリアル データが利用可能な場合にのみ、シリアル データを読み取れるようにする必要があります。データは 1,000 ミリ秒ごとに送信されています。

4

4 に答える 4

49

別のスレッドに入れます。たとえば、次のようになります。

import threading
import serial

connected = False
port = 'COM4'
baud = 9600

serial_port = serial.Serial(port, baud, timeout=0)

def handle_data(data):
    print(data)

def read_from_port(ser):
    while not connected:
        #serin = ser.read()
        connected = True

        while True:
           print("test")
           reading = ser.readline().decode()
           handle_data(reading)

thread = threading.Thread(target=read_from_port, args=(serial_port,))
thread.start()

http://docs.python.org/3/library/threading

于 2013-07-10T07:15:57.863 に答える