Cum se setează un cronometru și cum se șterge un cronometru? (Programare, Python, Timer)

oraș a intrebat.

Vreau să creez un cronometru. Când se termină, vor fi efectuate anumite acțiuni. Dar, pot întrerupe acest cronometru și îl pot reseta.Pseudocodul arată ca mai jos:

def timeout():
    print "time out!"
    T.cancel()  # reset timer T
    T = Timer(60, timeout)  
    T.start()

T = Timer(60, timeout)

def interrupt():
    T.cancel()  # reset timer T
    T = Timer(60, timeout)
    T.start()

if __name__ == '__main__':
    T.start()
    while True:
        if something is True:
            # interrupt

Soluția pe care am găsit-o este să anulez temporizatorul în funcția de întrerupere și apoi să creez un nou temporizator. Dar se pare că un temporizator este anulat și se creează un nou temporizator, ceea ce nu este de înaltă performanță.Aveți vreo idee?

Comentarii

  • puteți posta codul real în loc de pseudocod, demonstrând cum „dispare” firul? –  > Por shx2.
  • îmi pare rău, am făcut o greșeală. pentru că timer-ul este legat de thread, le-am încurcat. Am corectat greșeala. –  > Por oraș.
1 răspunsuri
Raymond Hettinger

The threading.Timer() este probabil ceea ce căutați:

from __future__ import print_function
from time import sleep
from random import random
from threading import Timer

def timeout():
    print("Alarm!")

t = Timer(10.0, timeout)
t.start()              # After 10 seconds, "Alarm!" will be printed

sleep(5.0)
if random() < 0.5:     # But half of the time
     t.cancel()        # We might just cancel the timer
     print('Canceling')

Comentarii

  • problema mea este că nu știu cum să reutilizez temporizatorul. Dacă de fiecare dată când apare întreruperea, anulez vechiul timer și apoi creez un nou timer,care nu este de înaltă performanță. –  > Por oraș.
  • Ce vă face să credeți că anularea unui temporizator și crearea unuia nou ar avea o performanță diferită de suspendarea și reluarea unui temporizator? Overhead-ul pur python și apelurile sistemului de operare ar fi substanțial similare (și la fel de nesemnificative în comparație cu restul programului dumneavoastră). –  > Por Raymond Hettinger.
  • Cum ați putea suspenda și relua temporizatorul? Aceasta este întrebarea pe care o pune. Și da, generarea de noi fire de execuție este costisitoare. –  > Por vgoklani.