データベース(MySQL)から毎分プログラムクエリデータがあります。
while 1:
self.alerteng.updateAndAnalyze()
time.sleep(60)
ただし、データは頻繁には変更されません。おそらく1時間または1日に1回です。(別のC ++プログラムによる変更)
変更が発生した場合に変更を追跡してから、データをクエリして更新するのが最善の方法だと思います。
何かアドバイス?
データベース(MySQL)から毎分プログラムクエリデータがあります。
while 1:
self.alerteng.updateAndAnalyze()
time.sleep(60)
ただし、データは頻繁には変更されません。おそらく1時間または1日に1回です。(別のC ++プログラムによる変更)
変更が発生した場合に変更を追跡してから、データをクエリして更新するのが最善の方法だと思います。
何かアドバイス?
何をしているかにもよりますが、SQLAlchemyのイベント機能が役立つかもしれません。
データベースで何かが発生したとき、つまり新しい行を挿入した後、または列の値を設定した後はいつでも、コードを実行できます。通知やその他の非同期プロセスを開始するためにFlaskアプリで使用しました。
http://docs.sqlalchemy.org/en/rel_0_7/orm/events.html#mapper-events
これは、データベースに新しいYourModelモデルが作成されるたびにkick_off_analysis()関数を実行するFlaskアプリのおもちゃのコードです。
from sqlalchemy import event
@event.listens_for(YourModel, "after_insert")
def kick_off_analysis(mapper, connection, your_model):
# do stuff here
それがあなたが始めるのに役立つことを願っています。
どれくらいの費用がかかるかはわかりませんupdateAndAnalyze()
が、ほとんどのSQLコマンドと同じように、本当にポーリングしたいものではないと確信しています。
オブザーバーパターンの教科書ケースがあります。MySQLが更新されるたびに、コード内で何らかの方法で何かを呼び出すようにします。これを行うための正確なメカニズムについては確信が持てませんが、関連するテーブルにトリガーを設定して、基になるテーブルが更新されたことをコードに通知できるようにする方法があるはずです。次に、ポーリングの代わりに、基本的に、何かをする必要があるという知識で「中断」されます。それはまたあなたが紹介しているその最大1分の遅れを取り除き、あなたがしていることは何でもよりきびきびと感じさせるでしょう。