私の知る限り、既に実行中の 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 つのライターしかサポートしないことです。そのため、データベースに大量の変更や追加を行う場合、ボトルネックになる可能性があります。