Domanda

Come faccio a sched un timer di ripetizione per 5 minuti intervalli. Che il fuoco a 00 secondi, poi ripetere a 00. Ok, non è difficile in tempo reale, ma il più vicino possibile con SYS ritardi. Cercando di evitare un accumulo di ritardi e avvicinarsi 00.

Lang: Python, OS: WinXP x64

Sistema ha una risoluzione 25ms.

Qualsiasi codice sarebbe utile, tia

È stato utile?

Soluzione

Non so come si fa più preciso rispetto con filettatura .Timer . E ' "una tantum", ma che semplicemente significa che la funzione di pianificare in questo modo deve immediatamente ri-programmare stesso per altri 300 secondi più tardi, prima cosa. (È possibile aggiungere la precisione misurando il tempo esatto con time.time ogni volta e variando il successivo ritardo di programmazione di conseguenza).

Altri suggerimenti

Provare e confrontare le stampe di tempo di questi due esempi di codice:

Codice di esempio 1

import time
delay = 5

while True:
    now = time.time()
    print time.strftime("%H:%M:%S", time.localtime(now))

    # As you will observe, this will take about 2 seconds,
    # making the loop iterate every 5 + 2 seconds or so.
    ## repeat 5000 times
    for i in range(5000):
        sum(range(10000))

    # This will sleep for 5 more seconds
    time.sleep(delay)

Codice di esempio 2

import time
delay = 5

while True:
    now = time.time()
    print time.strftime("%H:%M:%S", time.localtime(now))

    # As you will observe, this will take about 2 seconds,
    # but the loop will iterate every 5 seconds because code 
    # execution time was accounted for.
    ## repeat 5000 times
    for i in range(5000):
        sum(range(10000))

    # This will sleep for as long as it takes to get to the
    # next 5-second mark
    time.sleep(delay - (time.time() - now))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top