我有一个异步编程器,必须运行一个阻止功能而不阻止事件循环。该功能的执行大约需要4秒钟。不幸的是,我不能让它这么长时间阻止事件循环。
下面的代码说明了我想做什么。
image = Image.open(image_path)
result = await loop.run_in_executor(None, image_to_string(image ))
但是我遇到错误:
TypeError: 'str' object is not callable
您能告诉我这段代码有什么问题吗?如何获得期望的行为?
答案 0 :(得分:0)
您几乎完全正确。问题在于run_in_executor
是一个与其他函数一样的函数,因此,如果您将其传递给image_to_string(image)
,Python会将其解释为立即调用 image_to_string
的指令,并将通话的结果传递给run_in_executor
。
为避免这种解释,run_in_executor
接受功能,它将在另一个线程中自行调用。该函数可选地后面跟参数,因此正确的调用如下所示:
result = await loop.run_in_executor(None, image_to_string, image)