Python 在线程中调用方法
我的代码生成了许多线程来管理与许多I/O板的通信。通常,线程从板接收事件,并根据需要更新外部数据源。线程(1个或多个)的调用方式如下:Python 在线程中调用方法,python,multithreading,methods,Python,Multithreading,Methods,我的代码生成了许多线程来管理与许多I/O板的通信。通常,线程从板接收事件,并根据需要更新外部数据源。线程(1个或多个)的调用方式如下: phThreadDict[devId] = ifkit(self, phDevId, phIpAddr, phIpPort, phSerial) phThreadDict[devId].start() 这个很好用。但是,在某些情况下,我还需要线程向板发送消息。线程包含一个执行该工作的方法,我从主线程调用该方法,如下所示:(本例打开数字输出) 这是线程中包含的方
phThreadDict[devId] = ifkit(self, phDevId, phIpAddr, phIpPort, phSerial)
phThreadDict[devId].start()
这个很好用。但是,在某些情况下,我还需要线程向板发送消息。线程包含一个执行该工作的方法,我从主线程调用该方法,如下所示:(本例打开数字输出)
这是线程中包含的方法:
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)>}
{134997634:,554878244:,407897606:}
例如:
<ifkit(Thread-3, started daemon)>
如果我只有一根线,这个就可以了。但是,如果我有多个线程,那么只使用一个线程——当程序启动时,选择似乎是随机的
我怀疑将线程标识符存储在dict中是个问题,但它仍然适用于一个线程。与其将线程存储在“简单”关联数组中,不如事先实例化一个线程池(您可以在这里找到一个实现示例h**p://code.activestate.com/recipes/577187-python-thread-pool/或直接使用以下库) 同时实例化一个“看门狗”,你的每个线程都会持有一个对此看门狗的引用,因此当你的线程需要回调时,它们会将信息发回给这个看门狗。(注意死锁,请参阅)
注意:很抱歉使用了蹩脚的“h**p”,但我不会发布超过2个链接。…谢谢,第一个线程池链接似乎是正确的方向。但是,我没有看到(或缺少)的是如何让主程序调用特定线程中的线程。事实上,线程池状态为:“[threadpool]通过将作业放入工作请求队列,将作业分配给线程,然后由下一个可用线程接收。“在我的应用程序中,线程特定于物理外部I/O板,因此必须在正确的thread.Bump中调用该方法。真的,对此没有想法吗?
<ifkit(Thread-3, started daemon)>