2017-08-19 1 views
0

Ich habe diese funktionierende Timer-Funktion in Python ver3.6, die im Abstand von 2 Sekunden ausgeführt wird.Ändern Sie diese Timer-Funktion, um das Argument zu akzeptieren

def timer_function_working(): 
    threading.Timer(2, timer_function_working).start() 
    print ("stackoverflow") 

timer_function_working() 

Ich möchte diese Timer_function akzeptieren das Zeitintervall als ein Argument. Hier ist der neue Code;

def timer_function(interval_sec): 
    threading.Timer(interval_sec, timer_function).start() 
    print ("stackoverflow") 

timer_function(interval_sec=2) 

Allerdings bekomme ich diese Fehlermeldung;

TypeError: timer_function() missing 1 required positional argument: 'interval_sec' 

Wie ändere ich diese Timer-Funktion, um das Argument zu akzeptieren?

Antwort

1

Nach dem docs for threading.Timer, das erste Argument Timer ist interval

class threading.Timer(interval, function, args=[], kwargs={})

In Ihrem zweiten Codeblock, die erste Ausführung ohne Probleme läuft, weil Sie einen Wert für interval zur Verfügung gestellt haben. Wenn jedoch die function am Ende der Timer ‚s Dauer aufgerufen wird, Sie sich nicht über alle Argumente an die Funktion selbst, die zu dem Fehler führt:

TypeError: timer_function() takes exactly 1 argument (0 given) 

Sie können ein Argument an die Funktion übergeben Timer dass in der folgenden Weise nach Beendigung aufruft:

import threading 


def timer_function(interval_sec): 
    threading.Timer(interval_sec, timer_function, args=[interval_sec]).start() 
    print ("stackoverflow") 


timer_function(interval_sec=2) 

Alternativ können Sie einen Verschluss, um den Wert interval_sec auf eine andere Funktion zu binden, innerhalb timer_function definiert, die ohne Argumente genannt werden können:

def timer_function(interval_sec): 
    def inner_function(): 
     return timer_function(interval_sec) 
    threading.Timer(interval_sec, inner_function).start() 
    print ("stackoverflow") 


timer_function(interval_sec=2) 
Verwandte Themen