私は一般的にPythonとプログラミングには初めてです。私はpyserialを使用してデバイスドライバを作成しようとしています。私は、デバイスからデータを読み込み、std outに送信するスレッドをオープンしました。私のメインループでは、stdの命令を文字列として読み込み、辞書を使ってデバイスに書き込む関数を使用しました。PySerialオブジェクトを使ったPythonマルチスレッド
私のプログラムは自分の指示を読んでいますが、デバイスから出てくるはずのデータは表示していません。辞書にない命令を使用するとクラッシュするため、デバイスへの書き込みがわかります。私のコードがどのように構成されているのですか?
import serial
import threading
#ser is my serial object
def writeInstruction(ser):
#reads an instruction string from stdin and writes the corresponding instruction to the device
instruction = raw_input('cmd> ')
if instr == 'disable_all': defaultMode(ser)
else: ser.write(dictionaryOfInstructions[instruction])
time.sleep(.5)
def readData(ser):
# - Reads one package from the device, calculates the checksum and outputs through stdout
# - the package content (excludes the Package head, length, and checksum) as a string
while True:
packetHead = binascii.hexlify(ser.read(2))
packetLength = binascii.hexlify(ser.read(1))
packetContent = binascii.hexlify(ser.read(int(packetLength, 16) - 1))
if checkSum(packetHead + packetLength + packetContent):
print packetContent
readThread = threading.Thread (target = readData, args = ser)
readThread.start()
while True:
writeInstr(ser)
マルチスレッドプログラミングでシリアルオブジェクトを扱う適切な方法は何ですか?
それはあなたが 'て、readData(SER)'で行うことをしようとしているかを知るために役立つだろう。私はあなたのスレッドがデータを取得する前に完了しているのだろうかと思います。 'writeInstruction(ser)'もこれらの関数からより多くのコードを提供できますか? –
writeInstruction(ser)はデバイスのデータ収集(医療機器)をオンにしますreadData(ser)はデバイスから個々のパケットを読み取り、チェックサムを返します –
投稿されたコードでは問題を診断するには不十分です。可能であれば[MCVE](http://stackoverflow.com/help/mcve)を投稿してください。 – Aya