私のコードは、多数の I/O ボードとの通信を管理するために多数のスレッドを生成します。通常、スレッドはボードからイベントを受け取り、必要に応じて外部データ ソースを更新します。スレッド (1 つ以上) は次のように呼び出されます。
phThreadDict[devId] = ifkit(self, phDevId, phIpAddr, phIpPort, phSerial)
phThreadDict[devId].start()
これはうまくいきます。ただし、ボードにメッセージを送信するためにスレッドが必要な場合もあります。スレッドには作業を行うメソッドが含まれており、メインスレッドから次のようにそのメソッドを呼び出します: (この例ではデジタル出力をオンにします)
phThreadDict[devId].writeDigitalOutput(digitalOut, True)
これは、スレッドに含まれるメソッドです。
def writeDigitalOutput(self,index, state):
interfaceKit.setOutputState(index, state)
threading.enumerate()
生成:
{134997634: <ifkit(Thread-1, started daemon)>, 554878244: <ifkit(Thread-3, started daemon)>, 407897606: <tempsensor(Thread-4, started daemon)>}
インスタンスは次のとおりです。
<ifkit(Thread-3, started daemon)>
スレッドが 1 つしかない場合、これは正常に機能します。しかし、複数のスレッドがある場合、使用されるのは 1 つだけです。選択は、プログラムの開始時にランダムに行われるように見えます。
スレッド識別子をdictに格納することが問題だと思いますが、それでも1つのスレッドで動作します。