将线程置于睡眠状态直到事件X发生

tip*_*ipu 6 python concurrency multithreading locking

我正在写一个线程应用程序中的许多文件,我正在为每个文件创建一个处理程序.我有HandlerFactory类来管理这些处理程序的分发.我想做的是

线程A从HandlerFactory类请求并获取foo.txt的文件句柄

线程B请求foo.txt的文件处理程序

处理程序类识别此文件句柄已被签出

handler类将线程A置于休眠状态

线程B使用HandlerFactory中的包装器方法关闭文件句柄

HandlerFactory通知睡眠线程

线程B唤醒并成功获取foo.txt的文件句柄

这是我到目前为止,

def get_handler(self, file_path, type):
    self.lock.acquire()
    if file_path not in self.handlers:
        self.handlers[file_path] = open(file_path, type)
    elif not self.handlers[file_path].closed:
        time.sleep(1)
    self.lock.release()
    return self.handlers[file_path][type]
Run Code Online (Sandbox Code Playgroud)

我相信这成功地涵盖了睡眠和处理程序检索,但我不确定如何唤醒所有线程,甚至更好地唤醒特定线程.

RC.*_*RC. 6

您正在寻找的是一个条件变量.

条件变量

是Python 2库引用.
对于Python 3,可以在这里找到它