线程偶数中断处理程序

2024-04-19 05:35:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个类来创建线程,如果在某个时间内没有使用,则会超时。该类允许您将数据泵送到特定的线程(按关键字),如果不存在,则创建线程。在

不管怎样,我遇到的问题是主管理类不知道线程何时结束。我不能把像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函数中断。在


Tags: 数据代码处理程序信号时间事件关键字线程
1条回答
网友
1楼 · 发布于 2024-04-19 05:35:49

您仍然没有提到是否正在使用消息/事件循环框架,它将为您提供一种方法来分派对“main”线程的调用并调用事件处理程序。在

假设你没有,那么你就不能仅仅中断或者调用主线程。在

不过,您不需要这样做,因为当您决定是否需要创建一个新线程时,您只需要知道一个线程是否是活动的。你现在可以检查一下了。这样,您只需要一种在线程之间通信“完成”状态的方法。有很多方法可以做到这一点(我从未使用过.isAlive(),但您可以将信息传递回队列、事件甚至共享变量中)。在

使用Event它将如下所示:

class supervisor():
    def __init__:
        Setup thread dict with all threads as inactive 

    def dispatch(target, message):
        if(thread.event.is_set()):
            create new thread
            thread.event = Event()
        send message to thread



def ThreadFunc(event):
    while( !timeout ):
        wait for message:
            do stuff with message

    event.set()
    return

注意,这样仍然存在一个可能的竞争条件。主管线程可能会在工作线程调用.set()之前检查is_set(),这将谎报线程的工作能力。isAlive()也会存在同样的问题。在

你不使用线程池有什么原因吗?在

相关问题 更多 >