如何加速从notify\u all唤醒wait?

2024-09-22 16:40:46 发布

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

平台:CentOS 6上的Python2.6

我有两个线程使用同一个对象。线程1提供对象数据,当找到正确的数据时,它执行threading.Condition.notify_all()。在

线程2通过该对象对同一个条件变量调用threading.Condition.wait()。在

我在notify_all()调用之前和{}调用之后抓取{}。两者之间的时间差在9到45毫秒之间,那是永恒的!在

我所做的:我调用了os.nice()来降低Thread1的优先级,希望它能强制立即进行上下文切换[在线程1的threading.Thread()目标内调用os.nice()]。没有爱。在对notify_all()的调用后添加一个time.sleep(0.001)也没有爱情。在

我还应该注意这是一个多进程应用程序,这2个线程是在大约5个进程中的一个。我运行的是Xeon,有8个超线程内核和32GB的RAM。所以处理器管道应该是现象级的。在

建议?我需要问但我可能还没有问自己的问题?我希望有一些上下文转换时间,但45毫秒似乎绝对可笑。这真是一个永恒。在

编辑:使用条件变量的代码。在

def ProcessEvent( self, event ):
    with self.__conditionVar:
        if self.__testEvent( event ):
            self.__notifyTime = datetime.now()
            self.__conditionVar.notify_all()

def WaitForEvent( self, timeout_sec ):
    with self.__conditionVar:
        if not self.__alreadyFound():
            self.__conditionVar.wait( timeout_sec )
            delta = datetime.now() - self.__notifyTime
            print "Wake-up time =", delta

Tags: 数据对象selftime进程osnotifyall
1条回答
网友
1楼 · 发布于 2024-09-22 16:40:46

要加速从notify_all唤醒,请在wait返回后保持锁的时间更短。锁阻止了另一个线程的进程。在

如果这不能使问题的解决方案显而易见,那么很有可能是您滥用了条件。如果是,请解释为什么要使用条件。在

相关问题 更多 >