1

Web からデータをダウンロードし、データベースからデータを読み取り、そのデータベースにデータを書き戻す約 10 の異なる Python スクリプトがあります。これを 10 秒 (または最後のタスクが完了してから 10 秒) ごとに繰り返します。

問題は、これらのタスクを実行するための最良のアプローチは何ですか? 私はいくつかの方法を考えることができます:

  1. a while True タスクを実行してから一定時間スリープします。これは、supervisord のようなウォッチドッグによって保護され、常に稼働していることを確認できます。

  2. スクリプトにタスクを 1 回だけ実行させ、別のプロセスによって 10 秒ごとに 1 回外部からスクリプトを呼び出します。

  3. スクリプトにタスクを実行させると、たとえば 1 時間 (1 時間は 10 秒ごと)、ウォッチドッグを使用して、1 時間が経過したらタスクが再度実行されるようにします。

長時間にわたってメモリの問題などに対処したくないため、実際に何かを実行するプロセスを長時間実行することは避けたいと思います。

追加情報

  1. スクリプトは、それぞれが異なるソースからデータを取得し、異なるデータをクエリ、計算、およびデータベースに挿入するため、異なります。

  2. 取得されるデータはリアルタイムであるため、タスクは 10 秒ごとに実行されます。頻繁にデータを更新し続けるだけでなく、すべての履歴データをデータベースに保持する必要があります。

  3. スクリプトによって使用されるリソースは多数あります。MySQL 接続、HTTP 接続、Redis 接続などです。以前、特に MySQL 接続で長時間実行アプローチを使用する際に問題が発生しました (MySQL サーバーのようなものはなくなりました。すべての接続が閉じられていましたが)。したがって、スクリプトをより短い時間で実行する傾向があります。

これでいくつかの一般的なアプローチは何ですか?

4

2 に答える 2

0

スクリプトでメモリ リークが発生しない限り (ほとんどありません)、スクリプトはすべて同じである必要があります。したがって、単純にするために (プログラミング/デバッグにかかる​​時間は、マシンの時間の数ミリ秒よりもはるかに高価です。10 秒ごとでも!) 10 秒ごとにチェックする単一のスクリプトを使用します。

OTOHさん、10秒ごとにチェックするのはめんどくさいですね。監視しているものは何でも、変更があったときに通知されるように設定できませんか? または、一度に 1 日分のデータを取得できるように、レコードをバッチ処理しますか?

于 2013-03-26T18:51:55.767 に答える