2 Stimmen

Welche Datentypen helfen beim Ablauf des Timer-Verhaltens in Python

for MaxTime:
    run function1 for timeout 10 secs
    after timeout 10 sec ,again
    run function1 for timeout 10 secs
    after timeout 10 sec , again
    run function1 for timeout 10 secs
    ...
    (do it untill MaxTime is reached )

Welche der folgenden Module können verwendet werden?

sched.scheduler 

ou

threading.timer 

eine Mischung aus den beiden oben genannten?

Könnten Sie einen Algorithmus dafür angeben?

function1 ist nur ein Protokollierungscode, der in eine txt-Datei protokolliert wird. jedes Mal sollte ich die gleiche Funktion ausführen; function1 oder nehmen Sie der Einfachheit halber function1 als Code-Block an

1voto

jfs Punkte 370717

Meinen Sie etwas wie pygame.time.Clock() ?

Ausführen function1() alle 10 Sekunden, bis 100 Sekunden vergangen sind:

import logging
import pygame

logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%H:%M:%S')
def function1():
    logging.warning("write logs")

fps = .1      # call function1() every 10 seconds
maxtime = 100 # finish in 100 seconds

clock = pygame.time.Clock()
for _ in range(int(maxtime*fps + .5)):
    function1()
    clock.tick(fps) # at most `fps` function1() calls per second

Ausgabe

11:44:05 write logs
11:44:15 write logs
11:44:25 write logs
11:44:35 write logs
11:44:45 write logs
11:44:55 write logs
11:45:05 write logs
11:45:15 write logs
11:45:25 write logs
11:45:35 write logs

Ähnliches wurde mit threading.Timer() :

import logging
from time import time as timer
from threading import Timer

logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%H:%M:%S')

def function1(interval, maxtime):
    logging.warning('write logs')
    if timer() < maxtime:
        Timer(interval, function1, (interval, maxtime)).start()

function1(10, timer()+100)

Anmerkung: jeder Timer() erzeugt einen neuen Thread.

Ausgabe

09:06:31 write logs
09:06:41 write logs
09:06:51 write logs
09:07:01 write logs
09:07:11 write logs
09:07:21 write logs
09:07:31 write logs
09:07:41 write logs
09:07:51 write logs
09:08:01 write logs
09:08:11 write logs

1voto

jcollado Punkte 37561

Sie könnten verwenden glib.timeout_add(interval, callback, ...) . Es wird ausgeführt callback jede interval Millisekunden, bis der Rückruf zurückkehrt False .

Um sicherzustellen, dass der Rückruf nicht mehr ausgeführt wird, nachdem MaxTime können Sie die Zeit, zu der sie zum ersten Mal ausgeführt wurde, einfach so übergehen:

import gtk, glib
import time

def callback(max_time, start_time):
    elapsed_time = time.time() - start_time
    print 'Writing logs...'
    return elapsed_time < max_time

glib.timeout_add(10000, callback, 100, time.time())
gtk.main()

Anmerkung: interval ist in Millisekunden und max_time in Sekunden (dies kann bei Bedarf geändert werden)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X