webpy(webpy.org)を使ってアプリを書きました。このWebアプリの一部は、統計関数のバックグラウンドタスクを繰り返し実行することです。Pythonライブラリを使用APScheduler
してcronスタイルのスケジュールを実行しました。app.run()
開発中はwebpyをスタンドアロンモードで実行させるためです。この設定はうまくいきました。
ただし、デプロイすると、APSchedulerが機能しなくなることがわかりました。展開手順は、この記事にほぼ従っています。私のエントリポイントプログラムは、引き続き正常なスケジューリングログを出力します。ただし、リクエストが受信されない場合、uwsgiは実行中のwebpyアプリを一時停止(スレッドを一時停止)するようです。ページを更新すると、APSchedulerがウェイクアップし、いくつかのWARNING:apscheduler.scheduler:Run time of job "worker (trigger: cron[...], next run at: ..)" was missed by 0:04:36.389705
メッセージが出力されます。スケジュールどおりに稼働していません。
私の質問は、uwsgiwebpyアプリをデプロイするときにcronスタイルのタスクをスケジュールするにはどうすればよいですか。uwsgi自体がcronをサポートしているのを見ました。しかし、APSchedulerのようにアプリとどのように組み合わせることができるのでしょうか(または置き換えることができますか)?タスクはアプリのいくつかのモジュールと動的プロパティに依存しているため、スタンドアロンの.pyプログラムに簡単に変換することはできません。