Я пишу много файлов в многопоточном приложении и создаю один обработчик для каждого файла. У меня есть класс HandlerFactory, который управляет распределением этих обработчиков. То, что я хотел бы сделать, это то, что
поток A запрашивает и получает дескриптор файла foo.txt из класса HandlerFactory
поток B запрашивает обработчик файла foo.txt
класс обработчика распознает, что этот дескриптор файла был извлечен
класс обработчика переводит поток 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]
Я полагаю, что это успешно покрывает спящий режим и извлечение обработчика, но я не уверен, как разбудить все потоки или, что еще лучше, разбудить конкретный поток.