I am in search of a way to threading with wrapper, yet, the result of wrapped function MUST be still available.
Via searching Stackoverflow, a not so perfect solution appreared. As the code below:
def thread_run(func):
    """
    :param func:
    :return:
    """
    def wrapper(*args, **kwargs):
        s = threading.Thread(target=func, args=args, kwargs=kwargs)
        s.daemon = True
        s.start()
        return s
    return wrapper
with this wrapper do not suffice, because:
@thread_run
def powers(number):
    return number**2
if __name__ in "__main__":
   print(powers(2))  #out put <Thread(Thread-1, stopped daemon 123145406771200)>
I want the output of snippet to be 4
print(powers(2))
what should i do?
