异步运行的Python线程
我正在尝试运行下面的代码,希望它能够异步运行异步运行的Python线程,python,python-3.x,multithreading,python-multithreading,Python,Python 3.x,Multithreading,Python Multithreading,我正在尝试运行下面的代码,希望它能够异步运行 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 "
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\u app\u handler
,而不是传递函数对象。中的目标
需要一个可调用的。所以
而不是
task = threading.Thread(target=mock_app_handler(), args=())
使用
另外,您不需要传递空的
args
,因为函数mock\u app\u处理程序
不需要任何args问题是,您调用的是函数mock\u app\u处理程序
,而不是传递函数对象。中的目标
需要一个可调用的。所以
而不是
task = threading.Thread(target=mock_app_handler(), args=())
使用
此外,您也不需要传递空的args
,因为函数mock\u app\u处理程序
不需要任何argstask=threading.Thread(target=mock\u app\u handler)
不在那里调用函数,而是传递函数对象。另外,您不需要在那里使用args
,因为该函数不接受任何参数arguments@hansolo谢谢我的错。直到现在我才意识到。“现在工作了。”汉索洛补充道。我会接受的,当然。谢谢:)task=threading.Thread(target=mock_app_handler)
#不要在那里调用函数,而是传递函数对象。另外,您不需要在那里使用args
,因为该函数不接受任何参数arguments@hansolo谢谢我的错。直到现在我才意识到。“现在工作了。”汉索洛补充道。我会接受的,当然。谢谢:)我的代码是实际代码的精简版本。实际代码具有要传递的参数。谢谢。@没脑子哦,好的。当然:)我的代码是实际代码的精简版本。实际代码具有要传递的参数。谢谢。@没脑子哦,好的。当然可以:)