12

Python と PyGTK を使用しています。シリアルポートからデータを取得して保存する特定の機能を数分ごとに実行することに興味があります。

現在、time ライブラリで 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 分にすることができます。私の問題は、readerial() 関数を使用して、5 分ごとに何が起こっているかを一時停止し、time.sleep() 関数を使用する代わりに、常に何かを実行できるようにしたいということです。

この問題を解決する方法について何か提案はありますか? マルチスレッド?割り込み?私はpythonを使用していることに注意してください。

ありがとう。

4

4 に答える 4

9

これは私の答えとまったく同じです

時間が10分の1秒まで正確であることが重要でない場合は、次を使用します。

glib.timeout_add_seconds(60, ..)

それ以外は上記のとおり。

timeout_add_secondsを使用すると、システムはタイムアウトを他のイベントに合わせて調整し、長期的にはCPUのウェイクアップを減らし(特にタイムアウトが再発する場合)、惑星のエネルギーを節約できます(!)

于 2009-08-21T00:01:57.993 に答える
5

gtk.timeout_add は非推奨のようですので、使用する必要があります

def my_timer(*args):
    # Do your work here
    return True

gobject.timeout_add( 60*1000, my_timer )
于 2011-01-10T20:11:00.343 に答える
0

試す:

import wx
wx.CallLater(1000, my_timer)
于 2013-01-22T22:02:39.537 に答える