Invent остановил пользовательский поток через декоратор, но возникли проблемы с передачей параметров в аннотацию или вызовом аннотированной функции - PullRequest
0 голосов
/ 24 января 2019

Я создал класс с функцией-оберткой для выполнения их в отдельном потоке.Я хочу остановить поток с помощью соответствующего флага.Но я не могу вызвать свою многопоточную функцию.Я не понимаю, какие параметры мне нужно передать в декоратор или / и функцию.

#/usr/bin/python3
import threading

class ThreadedFunction():
    def threaded(fn, callback_func, isStop):
        """To use as decorator to make a function call threaded.
        It will call the callback_func when the function returns.
        Needs import
        from threading import Thread"""
        def wrapper(*args, **kwargs):
            def do_callback():
                callback_func(fn(args, kwargs))
            thread = threading.Thread(target=do_callback)
            thread.start()
            if isStop:
                print("Exit from thread")
                thread._stop()
            return thread
        return wrapper

    @threaded
    def wannaThread(self, isStop):
        while isStop != True:
             print("I want to run this in separate thread!")

if __name__ == '__main__':
    tfunction = ThreadedFunction.wannaThread(True)
    tfunction = ThreadedFunction.wannaThread(False)

вывод:

TypeError: threaded() missing 2 required positional arguments: 'callback_func' and 'isStop'

Как правильно передать параметры в аннотацию или вызвать функцию?Как правильно остановить поток?Спасибо за потраченное время!

...