0

私はPythonを初めて使用するので、経験豊富な人々からのアドバイスが必要です。コアPythonライブラリのみを使用してT分ごとに時間Aから時間BまでPythonメソッドを実行するための最良の方法は何ですか?

具体的には:

ファイル作成の差が常に0より大きいことを確認するために、ファイルのペアのタイムスタンプの監視を開始するシングルスレッドアプリが必要です。このモニターを実行する必要があるのは、2分ごとに9から6までだけです。スケジュールとタイムライブラリを見てみましょう...

4

4 に答える 4

1

あなたは出来る:

  1. cron (*nix 上) または Windows タスク スケジューラを使用して、必要な時間にスクリプトを実行します。

    これにより、ソリューションがよりシンプルかつ堅牢になります。

    または

  2. スクリプトをデーモンとして実行し、ファイル システム イベントにサブスクライブしてファイルを監視します。

    OSによっては、pyinotifyなどを使用できます。時間の変化に最適な反応を提供します

time、threading、sched モジュールに基づくソリューションは、より複雑で、実装が難しく、信頼性が低くなります。

于 2012-10-10T18:45:41.883 に答える
0
import time

#... initislize  A, B and T here

time.sllep(max(0, A - time.time()) # wait for the A moment

while time.time() < B:
    call_your_method()
    time.sleep(T)
于 2012-10-10T18:33:23.153 に答える
0

最初は、次のようなものがうまくいくかもしれないと考えました。

import time

# run every T minutes
T = 1
# run process for t seconds
t = 1.

while True:
    start = time.time()

    while time.time() < (start + t):
        print 'hello world'

    print 'sleeping'
    # convert minutes to seconds and subtract the about of time the process ran
    time.sleep(T*60-t)

しかし、あなたが達成しようとしていることを正確に知っていれば、もっと良い方法があるかもしれません

于 2012-10-10T17:56:45.460 に答える
0

これはあなたが求めているものですか?

import time
from datetime import datetime

def doSomething(t,a,b):
    while True:
        if a > b:
            print 'The end date is less than the start date.  Exiting.'
            break
        elif datetime.now() < a:
            # Date format: %Y-%m-%d %H:%M:%S
            now = datetime.now()
            wait_time = time.mktime(time.strptime(str(a),"%Y-%m-%d %H:%M:%S"))-\
                        time.mktime(time.strptime(str(now), "%Y-%m-%d %H:%M:%S.%f"))
            print 'The start date is',wait_time,'seconds from now.  Waiting'
            time.sleep(wait_time)
        elif datetime.now() > b:
            print 'The end date has passed.  Exiting.'
            break
        else:
            # do something, in this example I am printing the local time
            print time.localtime()
            seconds = t*60  # convert minutes to seconds
            time.sleep(seconds) # wait this number of seconds

# date time format is year, month, day, hour, minute, and second
start_date = datetime(2012, 10, 10, 14, 38, 00)
end_date = datetime(2012, 10, 10, 14, 39, 00)
# do something every 2 minutes from the start to end dates
doSomething(2,start_date,end_date)

開始日まで待機し、終了日まで関数を実行します。実行している内容によっては、追加のエラー チェックが行われる可能性があります。現時点では、終了日より後の開始日などの無効なエントリをチェックするだけです。日付と時刻を指定するだけです。お役に立てれば。

編集:ああ、追加の要件で質問を更新したようです。その場合、この方法はおそらく機能しません。

于 2012-10-10T18:42:22.173 に答える