我正在我的应用程序中创建异步函数调用以处理任务(函数)。
我曾尝试使用threadpoolexecutor进行如下所示的异步调用,但是它没有按预期工作,请让我知道我做错了什么?
class MainTest:
def __init__(self): pass
def show_msg(self):
print('inside show msg function..!')
time.sleep(3)
def executor_call(self):
executor = concurrent.futures.ThreadPoolExecutor(max_workers=1)
executor.submit(obj.show_msg())
executor.shutdown(wait=False)
print('Hi')
obj = MainTest()
obj.executor_call()
我期望上面的代码输出像
Hi inside show msg function..!
但是我得到
inside show msg function..! Hi
答案 0 :(得分:0)
您要立即调用函数,而不是通过ThreadPoolExecutor
执行它。这行:
executor.submit(obj.show_msg())
在功能上等同于:
result = obj.show_msg()
executor.submit(result)
ThreadPoolExecutor.submit()
希望给您传递一个可调用对象,它将在单独的线程中执行,因此将调用更改为:
executor.submit(obj.show_msg)
话虽如此,即使您进行修复修复,除非您在打印前time.sleep(3)
进行打印,否则您仍不会得到预期的行为。 show_msg()
函数中显示一条消息。
此外,请记住,由于{{3},使用线程并不能为您提供并行执行,它可以让您并行执行Python领域内发生的所有事情(系统调用如I / O可以并行发生)。 }。如果要适当的并行执行,则需要使用multiprocessing
。