Сторожевой таймер Python и работа с потоками в порядке очереди
У меня есть сценарий Python, который отслеживает, создаются ли новые файлы в данном каталоге X, если новые файлы появляются, сценарий вызывает другой модуль для обновления текстового файла. Новые файлы в каталоге X создаются с 1 удаленного компьютера, и может случиться так, что несколько файлов будут созданы одновременно.
Сценарий выглядит примерно так: когда удаленный компьютер создает один файл время от времени, он работает хорошо, но я думаю, что у меня могут возникнуть проблемы, если другой компьютер создаст несколько файлов за очень короткое время. И несколько экземпляров "Alarm" откроют неверную версию "shared_file.txt". Как я могу установить поток в очередь, чтобы работать в порядке очереди? И разрешить только один за раз?
app.py
from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
import threading
from MyModule.Alarm import main as Alarm
class AlarmHandler(PatternMatchingEventHandler):
patterns = ["*alarm*"]
def process_alm(self, event):
alarm_thread = threading.Thread(target=Alarm, args=(event.src_path,))
alarm_thread.start()
return
def on_created(self, event):
self.process_alm(event)
def main():
event_handler = AlarmHandler()
observer = Observer()
observer.schedule(event_handler, path='/path/to/spool/new', recursive=False)
observer.daemon=True
observer.start()
try:
while True:
sleep(1)
except:
observer.unschedule_all()
observer.stop()
scheduler.shutdown()
observer.join()
if __name__ == '__main__':
main()
MyModule / Alarm.py
def main( wd_file ):
with open( wd_file, 'r') as f:
# Create python vars with wd_file
with open("shared_file.txt", 'r') as f:
# Create python vars with shared_file.txt
# Calculations using shared_file.txt and wd_file
# Call a server (response may take 1-2s)
with open("shared_file.txt", "w") as f:
f.write( something_calculated_above )