X 分ごとに関数を実行する - Python
質問
PythonとPyGTKを使用しています。シリアルポートからデータを取得して保存する特定の関数を数分ごとに実行することに興味があります。
現在、時間ライブラリの sleep() 関数を使用しています。処理を行えるようにするために、システムを次のように設定しました。
import time
waittime = 300 # 5 minutes
while(1):
time1 = time.time()
readserial() # Read data from serial port
processing() # Do stuff with serial data, including dumping it to a file
time2 = time.time()
processingtime = time2 - time1
sleeptime = waittime - processingtime
time.sleep(sleeptime)
この設定により、シリアル ポートからのデータの読み取り間隔を 5 分にすることができます。私の問題は、time.sleep() 関数を使用する代わりに、readserial() 関数で 5 分ごとに起こっていることを一時停止させ、常に処理できるようにしたいということです。
この問題を解決する方法について何か提案はありますか?マルチスレッド?中断しますか?Pythonを使用していることに注意してください。
ありがとう。
解決
睡眠と、このようなループを使用しないでください、それは使う代わりに、任意のUIイベントを処理することからGTKをブロックしますGTKタイマー例えばます。
def my_timer(*args):
return True# do ur work here, but not for long
gtk.timeout_add(60*1000, my_timer) # call every min
他のヒント
これはまさにそのようなものです 私の答えはここにあります
時間が 10 分の 1 秒まで正確であることが重要でない場合は、次を使用します。
glib.timeout_add_seconds(60, ..)
それ以外は上記の通り。
timeout_add_秒 システムがタイムアウトを他のイベントに合わせて調整できるようになり、長期的には CPU ウェイクアップが減少します (特にタイムアウトが再発する場合)。 地球のためにエネルギーを節約する(!)
gtk.timeout_addは廃止されるように見えるので、あなたが使用する必要があります。
def my_timer(*args):
# Do your work here
return True
gobject.timeout_add( 60*1000, my_timer )
試してください:
import wx
wx.CallLater(1000, my_timer)
所属していません StackOverflow