ThreadPoolExecutor提交不立即返回

时间:2018-12-25 07:46:07

标签: python-2.7

我正在我的应用程序中创建异步函数调用以处理任务(函数)。

我曾尝试使用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

1 个答案:

答案 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