gpt4 book ai didi

python-2.7 - ThreadPoolExecutor 提交不立即返回

转载 作者:行者123 更新时间:2023-12-05 05:13:10 28 4
gpt4 key购买 nike

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

我已经尝试使用如下所示的线程池执行器进行异步调用,但它没有按预期工作,请告诉我我做错了什么?

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()

我期待上面的代码输出像

Hiinside show msg function..!

但是我得到了

inside show msg function..!Hi

最佳答案

您将立即调用您的函数,而不是通过 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() 函数中打印消息之前

此外,请记住,使用线程并不能并行执行,它可以并行执行 Python 领域内发生的所有事情(系统调用,如 I/O 可以并行发生),因为 dreaded GIL .如果您想要适当的并行执行,则需要使用 multiprocessing

关于python-2.7 - ThreadPoolExecutor 提交不立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53920372/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com