Ich möchte einen Dekorator erstellen, der Funktion in einem eigenen Thread laufen lassen kann. Und ich möchte auch eine Warteschlange als Argor des Dekorators verwenden, so dass ich den Rückgabewert der Funktion erhalten kann. So:Python Dekorateur mit Multithreading
import queue
result = queue.Queue
@thread(result)
def function(args):
print ("Hello World!")
return args
function("Hello Everyone!")
print (result.get())
Vorgefasste, wird der Code diese Ausgabe erhalten:
Hello World!
Hello Everyone!
So schreibe ich Code wie folgt:
def thread(resultQueue = None):
def wrapper(function):
def process(*args, **kwargs):
ret = function(*args, **kwargs)
if resultQueue : resultQueue.put(ret)
return resultQueue
thread = threading.Thread(target = process)
thread.setDaemon(True)
thread.start()
return process
return wrapper
a = queue.Queue()
@basic.thread(a)
def test(arg):
print (arg)
time.sleep(3)
return arg[::-1]
test("Hello World!")
print ("Hello!")
print (a.get())
Aber ich habe diesen Fehler:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Python34\lib\threading.py", line 911, in _bootstrap_inner
self.run()
File "C:\Python34\lib\threading.py", line 859, in run
self._target(*self._args, **self._kwargs)
File "test.py", line 214, in process
ret = function(*args, **kwargs)
TypeError: test() missing 1 required positional argument: 'arg'
Warum? Ich habe diese Ausnahme und wie kann ich das beheben?
Vielen Dank!
https://stackoverflow.com/questions/14234547/threads-with-decorators Wenn Sie eine Erklärung benötigen, lassen Sie es mich wissen. – snahor