概要
Python でプログラムを継続的に実行させる方法はいくつか存在します。このドキュメントでは、プロフェッショナルなコーダー向けに、それぞれの方法の詳細とコード例、応用例を紹介します。
選択肢
1. 無限ループ
- 基本的な手法ですが、効率が悪くリソース消費が激しい可能性があります。
- コード例:
import time
while True:
print("タスクを実行します")
time.sleep(5) # 5秒おきに実行
- 応用例:
- センサーデータの定期的な収集・送信
- ウェブサイトの定期的な監視と通知
- ゲームのメインループ
2. スケジューリングライブラリ
- 複雑なスケジュール設定や並列実行が容易に実現できます。
- コード例 (schedule):
import schedule
import time
def my_job():
print("タスクを実行します")
schedule.every(10).seconds.do(my_job) # 10秒おきに実行
while True:
schedule.run_pending()
time.sleep(1)
- 応用例:
- メールの定期送信
- SNSへの投稿予約
- データのバックアップ
3. OS のジョブスケジューラ
- システムレベルでの制御に適しています (Cron, Task Scheduler)。
- コード例 (Python から crontab を編集):
import crontab
cron = crontab.CronTab(user=True)
job = cron.new(command='python my_script.py')
job.setall('0 */2 * * *') # 2時間おきに実行
cron.write()
- 応用例:
- 夜間バッチ処理
- システムメンテナンス
- ログファイルのローテーション
4. バックグラウンドプロセス
- システム起動時に自動起動するプログラムに適しています。
- コード例 (daemonize モジュール):
import daemon
import daemon.pidfile
with daemon.DaemonContext(
pidfile=daemon.pidfile.PIDLockFile('/tmp/my_daemon.pid')
):
while True:
# 処理を実行
time.sleep(60)
- 応用例:
- システム監視エージェント
- ログ収集デーモン
- ネットワークサービス
プロフェッショナルなアプローチ
-
マルチスレッド/マルチプロセス:
- 大量データの並列処理、CPU負荷の高い処理の分散に有効。
-
非同期プログラミング:
- I/O 待ちの多い処理の効率化に役立ちます。
-
エラー処理/ロギング/モニタリング:
- 障害の検知と対応、運用状況の把握に不可欠です。
選択の指針
タスクの性質、運用環境を考慮し、最善の方法を選択・実装してください。