【发布时间】:2010-05-10 02:52:22
【问题描述】:
我正在一个线程应用程序中写入许多文件,并且我正在为每个文件创建一个处理程序。我有 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]
我相信这涵盖了睡眠和处理程序检索成功,但我不确定如何唤醒所有线程,甚至更好地唤醒特定线程。
【问题讨论】:
标签: python concurrency multithreading locking