平台:CentOS 6上的Python2.6
我有两个线程使用同一个对象。线程1提供对象数据,当找到正确的数据时,它执行threading.Condition.notify_all()
。在
线程2通过该对象对同一个条件变量调用threading.Condition.wait()
。在
我在notify_all()
调用之前和{
我所做的:我调用了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
要加速从
notify_all
唤醒,请在wait
返回后保持锁的时间更短。锁阻止了另一个线程的进程。在如果这不能使问题的解决方案显而易见,那么很有可能是您滥用了条件。如果是,请解释为什么要使用条件。在
相关问题 更多 >
编程相关推荐