我的代码产生了许多线程来管理与许多 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)>
如果我只有一个线程,这很好用。但是,如果我有多个线程,则只使用一个 - 选择似乎是在程序启动时随机做出的。
我怀疑将线程标识符存储在 dict 中是问题所在,但它仍然适用于一个线程。