0

雨量計でパルス (ホール効果センサー) をカウントして降水量を測定するプログラムがあります。継続的に実行され、5 分ごとに多数のパルスがカウントされ、それが降雨量に変換されます。1 時間後 (12 ~ 5 分の測定値)、合計を追加すると、これが 1 時間ごとの降雨量になります。このプログラムを構成して、最も古い測定値を削除し、1 時間後に 5 分ごとに新しい測定値を追加するようにしました。 "totalrainlasthour" と呼ばれる 1 時間ごとの雨量の実行。

私の問題は、風速、温度などの他のデータを含む別のプログラムを使用して、このデータを地下の気象にアップロードしたいということです。このアップロードは 5 分ごとに行われます。「totalrainlasthour」の現在の値を含めて、アップロードに使用したいと考えています。

「from import」コマンドを試してみましたが、読んでみるとうまくいかないようです。

from rainmodule import totalrainlasthour
print totalrainlasthour

別のプログラムから変数の現在の値を取得する方法はありますか?

4

1 に答える 1

0

私の知る限り、既に実行中の Python インスタンス内から値にアクセスするために起動したばかりの Python スクリプトには、良い方法はありません。ただし、いくつかの回避策を試すことができます。

天気アップロード スクリプトを常に実行することが許容される場合は、次のように構成できます。

import time

import rainmodule
import windmodule
# etc

def start():
    # instantiate classes so you can keep track of state
    rain = rainmodule.RainCollection()
    wind = windmodule.WindCollection()
    # etc

    prev_time = time.time()

    while True:
        rain.loop()
        wind.loop()
        # etc


        now = time.time()
        if now - prev_time > (60*60*5):
            prev_time = now

            totalrainlasthour = rain.totalrainlasthour
            winddata = wind.data
            # upload code here

if __name__ == '__main__':
    start()

この方法は、すべてのデータ収集モジュールを変更して、「マスター」whileループ内で繰り返し実行できることを前提としています。

この形式に合わせてコードをまとめることができない場合 (またはloop一部のモジュールのメソッドの実行に時間がかかる場合) は、マルチプロセッシングモジュールまたはスレッドモジュールを使用して各モジュールをプロセスとして起動し、いくつかのモジュールを使用して通信することができます。同期されたデータ構造またはキュー。


別の解決策は、ある種のデータベースを作成し (Python にはsqliteがバンドルされており、動作する可能性があります)、各スクリプトでそのデータベースに書き込むことです。そうすれば、任意のスクリプトを実行して、データベースから必要なものを取得することができ、他のデータ収集モジュールに結び付ける必要はありません。

sqlite の使用に関する唯一の潜在的な問題は、軽量であるため、一度に1 つのライターしかサポートしないことです。そのため、データベースに大量の変更や追加を行う場合、ボトルネックになる可能性があります。

于 2013-10-05T16:36:45.670 に答える