簡単な処理の自動化をして,それを APScheduler の BackgroundScheduler で指定時刻にやれるようにして,そのトリガを入れる WebUI を Flask で組んで,少し真面目に動かそうかと思って uWSGI で動かしたらスケジューラが動かんかった…… 残念.flask コマンドで動かすときには動作してるので,uWSGI での起動でなにか変なことが起きてるっぽい.
ということで,uWSGI がアプリを起動する辺りの情報を色々と調べた結果,たぶんワーカに app のコピーを設置する(fork する)ときに BackgroundScheduler のスレッドがどっか行っちゃってるんじゃないかな…… ということに思い至った.なので,--lazy-apps を付けて各ワーカ上で app をロードするようにしてみたら問題解決した.めでたし.
今日の結論:なにかおかしかったらまずは --lazy-apps 付けて試せ.
なお,そもそも複数ワーカで動くようなアプリだったらちゃんとしたスケジューラを使えということになるのでここらは関係ない気がする.自分が使うだけなのでワーカ数 1 で動かしつつ BackgroundScheduler のまま手抜きしてたらハマったという.ワーカ数 1 で動かしてたので(fork とかせずに)最初にロードされたのがそのままワーカで使われるかなと思ってたけどそんなことはなかった……
- Newer: ことはじめ