我正在编写一个类来创建线程,如果在某个时间内没有使用,则会超时。该类允许您将数据泵送到特定的线程(按关键字),如果不存在,则创建线程。在
不管怎样,我遇到的问题是主管理类不知道线程何时结束。我不能把像join或poll这样的阻塞代码放进去看看它是否有效。我想要的是一个事件处理程序,当一个线程结束(或即将结束)时调用它,以便我可以通知主管线程不再处于活动状态。在
这是不是可以用信号或类似的方法?在
作为psuedocode,我要找的是:
def myHandlerFunc():
# inform supervisor the thread is dead
t1 = ThreadFunc()
t1.eventHandler(condition=thread_dies, handler=myHandlerFunc)
父线程最好是直接传递一个线程。我相信有人会责备我进行数据流反转。在
编辑:以下是一些psuedo代码:
^{pr2}$主要的一点是,通过主管向线程(由关键字引用)发送消息。管理器确保线程是活动的(因为它们会在一段时间后超时),如果线程死了就创建一个新的线程,然后发送数据。在
再看一次,很容易避免需要事件处理程序,因为我可以使用threadObj.isAlive公司()而不是动态保持线程状态的dict。在
但是出于好奇,是否可以通过线程发送的信号在supervisor类中调用处理程序?主应用程序代码将调用调度主管()功能一次,然后做其他事情。当线程已经关闭时,它将被thread_timeout_handler函数中断。在
您仍然没有提到是否正在使用消息/事件循环框架,它将为您提供一种方法来分派对“main”线程的调用并调用事件处理程序。在
假设你没有,那么你就不能仅仅中断或者调用主线程。在
不过,您不需要这样做,因为当您决定是否需要创建一个新线程时,您只需要知道一个线程是否是活动的。你现在可以检查一下了。这样,您只需要一种在线程之间通信“完成”状态的方法。有很多方法可以做到这一点(我从未使用过.isAlive(),但您可以将信息传递回队列、事件甚至共享变量中)。在
使用Event它将如下所示:
注意,这样仍然存在一个可能的竞争条件。主管线程可能会在工作线程调用
.set()
之前检查is_set()
,这将谎报线程的工作能力。isAlive()也会存在同样的问题。在你不使用线程池有什么原因吗?在
相关问题 更多 >
编程相关推荐