平台:CentOS 6上的Python 2.6如何加速从notify_all等待唤醒?
我有2个线程使用同一个对象。线程1提供对象数据,当找到正确的数据时,它执行threading.Condition.notify_all()
。
线程2通过对象在相同的条件变量上调用threading.Condition.wait()
。
我在拨打notify_all()
之前拨打datetime.datetime.now()
,并在wait()
之后致电。两者之间的时间差异在9到45毫秒之间变化。这是永恒!
我试过了:我已经调用os.nice()
来降低Thread1的优先级,希望它会强制立即切换上下文[我在线程1的threading.Thread()
target中调用os.nice()
]。没爱。拨打notify_all()
后再加上time.sleep(0.001)
也没有爱情。
我也应该注意到这是一个多进程应用程序,这两个线程在大约5个进程之一。我正在运行一个至强8核超线程和32 GB内存的Xeon。所以处理器管道应该是非常好的。
对此提出建议?我需要问的问题是我可能没有问过自己吗?我期望有一些上下文切换的时间,但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
这不是上下文切换时间。现在是第一个线程完成对象的时候了。锁的整点是防止两个线程同时访问线程。他们必须轮流。 –