前のページのワーカープログラムでは待ち行列用 queue フォルダが空になればプログラムの実行が終了しました.ここではワーカープログラムを常駐化し,新たなファイルが待ち行列に加わったらそのファイルも処理されるようにします.
具体的には次のとおり,try による例外処理と while による無限ループを作成します.ここで,time.sleep(1) によって1秒間動作が停止することにより,超高速で無限ループが回り続け CPU を無駄に食い潰すことを防止しています.
worker.py
from pathlib import Path
import shutil
import time
BASE_DIR = Path(__file__).parent
QUEUE_DIR = BASE_DIR / "queue"
DONE_DIR = BASE_DIR / "done"
# ディレクトリを作っておく
QUEUE_DIR.mkdir(parents=True, exist_ok=True)
DONE_DIR.mkdir(parents=True, exist_ok=True)
try:
while True:
for src in QUEUE_DIR.glob("*.md"): # 拡張子が .md のファイルだけ
print(f"処理開始: {src.name}")
with open(src, "r", encoding="utf-8") as f:
print(f.read())
dst = DONE_DIR / src.name
shutil.move(src, dst)
print(f"完了: {dst}")
time.sleep(1)
except KeyboardInterrupt:
print("停止します")
プログラムを実行する前に,待ち行列用 queue フォルダに2つのマークダウンファイルが格納されていることを確認します.また,完了用 done フォルダは空であることも確認します.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci queue ⏎ ディレクトリ:C:\Users\rinsaka\Documents\python\watchdog\queue Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2026/10/25 18:18 56 sample1.md -a--- 2026/10/25 18:18 115 sample2.md (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci done ⏎ (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>
プログラムを実行します.実行直後に2つのマークダウンファイルの内容が表示され,完了用 done フォルダに移動されました.その後,sample1.md ファイルを3度 queue フォルダに移動させました.その都度,内容が表示されて done フォルダに戻ることを確認しました
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> python worker.py ⏎ 処理開始: sample1.md # Watchdog Watchdogでフォルダを監視します. 完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md 処理開始: sample2.md # 自動処理 新たなファイルが保存されたときに,自動的に何らかの処理を行いたい. 完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample2.md 処理開始: sample1.md # Watchdog Watchdogでフォルダを監視します. 完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md 処理開始: sample1.md # Watchdog Watchdogでフォルダを監視します. 完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md 処理開始: sample1.md # Watchdog Watchdogでフォルダを監視します. 完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md Ctrl + C 停止します (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>
プログラムの実行を Ctrl + C で終了させた後,待ち行列用 queue フォルダが空になり,完了用 done フォルダに格納されていることを確認します.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci queue ⏎ (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci done ⏎ ディレクトリ:C:\Users\rinsaka\Documents\python\watchdog\done Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2026/10/25 18:18 56 sample1.md -a--- 2026/10/25 18:18 115 sample2.md (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>
現時点でフォルダ監視とワーカープログラムの基本機能が作成できました.次のページでは両方のプログラムを同時に起動し,パイプライン処理を行ってみます.