外部ソース (この場合はシリアル ポート) から約 2.5 秒ごとにデータが入ってきます。
2.5 秒ごとではなく、5 分ごとにこのデータのサンプルを (mysql に) 保存したいと考えています。
これをPythonでどのように実装しますか?
スクリプトの残りの部分が停止するため、おそらくスリープ機能を使用することはできません。
質問する
14292 次
2 に答える
1
各着信イベントの最後の保存から経過した時間を確認し、各保存後に最終保存のタイムスタンプを更新します。
import time
lastsave = 0
def SaveEvent(data):
# do what you need to save it
...
# I'm assuming there's some sort of event loop that
# detects new events and directs them to some HandleEvent function
def HandleEvent(data):
global lastsave
if time.time() - lastsave > 300:
# this is in seconds, so 5 minutes = 300 seconds
lastsave = time.time()
SaveEvent(data)
アプリケーションがマルチスレッドまたはマルチプロセッシングの場合は、関数にロックを実装してSaveEvent
同時保存を回避することも検討する必要があります。
于 2013-02-01T21:41:30.380 に答える
1
のようなTimer
クラスを使用するだけです。threading
import time
from threading import Timer
def poll_port():
print "Getting my data from port", time.time()
def main():
print "Main:enter", time.time()
while True:
t = Timer(5, poll_port)
t.start()
t.join()
print "after join:", time.time()
if __name__ == "__main__":
main()
出力例:
Main:enter 1359755186.87
Getting my data from port 1359755191.88
after join: 1359755191.88
Getting my data from port 1359755196.88
after join: 1359755196.88
Getting my data from port 1359755201.88
after join: 1359755201.88
Getting my data from port 1359755206.88
于 2013-02-01T21:47:14.093 に答える