Python 异步线程 运行

Python Thread running asynchronously

我正在尝试 运行 下面的代码期望它 运行 异步。

import threading
import time


def mock_app(widgets=None, filters=None):
    print('Mock app called')
    task = threading.Thread(target=mock_app_handler(), args=())
    task.start()
    print('Thread spawned')
    return "success"


def mock_app_handler():
    # do something
    print('doing something')
    time.sleep(2)
    print('done something')


print(mock_app())

但是,代码是同步执行的。我得到以下结果。

Mock app called
doing something
done something
Thread spawned
success

为什么会这样?我错过了什么吗?

更新: 我尝试设置 task.daemon = True。那也没用。

问题是,您调用函数 mock_app_handler 而不是传递函数对象。 threading.Thread 中的 target 需要一个可调用对象。所以

而不是

task = threading.Thread(target=mock_app_handler(), args=())

使用

task = threading.Thread(target=mock_app_handler)

此外,您不需要传递空 args,因为函数 mock_app_handler 不需要任何 args.