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
.
我正在尝试 运行 下面的代码期望它 运行 异步。
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
.