LoginSignup
1
5

Pythonでプログラムを継続的に実行させる方法

Last updated at Posted at 2024-01-23

概要

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 待ちの多い処理の効率化に役立ちます。
  • エラー処理/ロギング/モニタリング:
    • 障害の検知と対応、運用状況の把握に不可欠です。

選択の指針

タスクの性質、運用環境を考慮し、最善の方法を選択・実装してください。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5