社内からクラウドのシステムにデータを送信すると、当該データの元フォルダに、処理結果を知らせるファイルが届く運用環境が整っています。
そこで、処理結果のファイルが到着したら、同フォルダ内の送信データおよび結果ファイルを別フォルダへ退避、また処理結果ファイルをメール送信する仕組みを作りました。以下抜粋です。
python
1from watchdog.events import FileSystemEventHandler 2from watchdog.observers import Observer 3import os 4import time 5''' 6###################################################################################################### 7# 8# # 9###################################################################################################### 10''' 11class ChangeHandler(FileSystemEventHandler): 12 def __init__(self, observer): 13 self.observer = observer 14 15 def on_created(self, event): 16 filepath = event.src_path 17 filename = os.path.basename(filepath) 18 foldername = os.path.basename(os.path.dirname(filepath)) 19 20 result = mail.send_Mail(arges[1], arges[2], arges[3], foldername, arges[4] + '/' + filename) 21 backup.move_files(arges[4], arges[5]) 22 23 24 self.observer.unschedule_all() 25 self.observer.stop() 26 27if __name__ in '__main__': 28 mail = Email() 29 backup = BackUp() 30 31 observer = Observer() 32 event_handler = ChangeHandler(observer) 33 observer.schedule(event_handler, target_dir, recursive=True) 34 observer.start() 35 try: 36 while observer.is_alive(): 37 time.sleep(0.1) 38 except KeyboardInterrupt: 39 observer.unschedule_all() 40 observer.stop() 41 observer.join()
問題点と質問
クラウドのシステムから届く結果ファイルが 完全に送信処理が終わる前に届いているようで、イベント発火が期待以上に速いことに困っています。
・メールに添付された結果ファイルは空の状態であるも フォルダ上の当該結果ファイルを後から確認すると空ではない
・本来送信したファイルも退避されるはずだが、イベント発火時にまだ送信中=INUSEになっているためか 退避されていない
問題が生じています。
on createdの関数の頭部分で ある程度の秒数time.sleep(XXX)をすればよいのかな、と対応してみたのですが 状況変わらずでした。どういう対策をとるのが得策か どなたかご教示を頂けないでしょうか
なお、上記Pythonの自作アプリケーションは 送信データの作成・配置用途のAサーバからの起動であり、
クラウド向け送信処理(バットファイル)は フリーのフォルダ監視ソフトによるり自身=Bサーバからの起動になっています。Aサーバがデータの配置を終えることを Bサーバ側で察知という感じです。
回答1件
あなたの回答
tips
プレビュー