it-swarm.com.de

threading.Timer ()

ich muss ein Programm im Netzwerkkurs schreiben, das so etwas wie selektive Wiederholung ist, aber einen Timer benötigt. Nach der Suche in Google habe ich festgestellt, dass threading.Timer mir helfen kann. Ich habe ein einfaches Programm geschrieben, um zu testen, wie threading.Timer funktioniert.

import threading

def hello():
    print "hello, world"

t = threading.Timer(10.0, hello)
t.start() 
print "Hi"
i=10
i=i+20
print i

dieses Programm läuft korrekt. aber wenn ich versuche, hallo Funktion auf eine Weise zu definieren, die Parameter wie geben:

import threading

def hello(s):
    print s

h="hello world"
t = threading.Timer(10.0, hello(h))
t.start() 
print "Hi"
i=10
i=i+20
print i

das Ergebnis ist:

hello world
Hi
30
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 726, in run
    self.function(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable

ich kann nicht verstehen, was das Problem ist! Kann mir jemand helfen?

25
sandra

Sie müssen nur die Argumente für hello in ein separates Element im Funktionsaufruf einfügen, wie folgt:

t = threading.Timer(10.0, hello, [h])

Dies ist ein gängiger Ansatz in Python. Andernfalls wird bei Verwendung von Timer(10.0, hello(h)) das Ergebnis dieses Funktionsaufrufs an Timer übergeben. Dabei handelt es sich um None, da hello keine expliziten Angaben macht Rückkehr.

57
tom10