Florian Lindner wrote:
Am Samstag 02 Juli 2011, 17:35:00 schrieb Stefan Schwarzer:
Hallo Florian,
On 2011-07-02 12:25, Florian Lindner wrote:
Am Dienstag 28 Juni 2011, 21:10:46 schrieb Hans-Peter Jansen:
On Tuesday 28 June 2011, 16:25:04 Florian Lindner wrote: async = Async(threading.Thread)
In [7]: @async
...: def add(b): ...: return b+2
...: In [8]: add(4) Out[8]: <Thread(add-1, stopped 139819357185792)>
Das klappt soweit alles ganz gut. Wenn ich allerdings die callback funktionen benutzen will, bekomme ich es nicht hin:
In [9]: def os(result): ...: print "Success", result
ich würde eher davon abraten, eine Funktion so zu nennen wie ein häufig benutztes Modul aus der Standard-Bibliothek. Das kann leicht zu Verwirrung führen.
Klaro, das war so nur in die Shell gehackt.
TypeError: __call__() takes at least 2 arguments (2 given)
Die Methode akzeptiert mindestens zwei Parameter, die du auch angegeben hast, aber du bekommst einen TypeError dazu? Hast du die Fehlermeldung richtig übernommen?
Ein komplettes Skript schaut jetzt so aus:
from common import Async import threading
async = Async(threading.Thread)
def o_s(result): print "Success: ", result
@async(on_success=o_s) def add(x): return x+2
res = add(2) print res
und wenn es ausgeführt wird:
florian@horus ~/SA/src (git)-[master] % python2 test.py Traceback (most recent call last): File "test.py", line 9, in <module> @async(on_success=o_s) TypeError: __call__() takes at least 2 arguments (2 given)
Version von python ist 2.7.2.
Faszinierende Fehlermeldung; Python 2.6 ist dagegen richtig langweilig:
$ python async.py Traceback (most recent call last): File "async.py", line 68, in <module> @async(on_success=on_success) TypeError: __call__() takes at least 2 non-keyword arguments (1 given)
Wenn ich den Dekorator ohne Argumente benutze funktioniert es, aber halt kein Callback.
Probier es mal zu Fuß: def add(x): return x + 2 add = async(add, on_success=o_s)