如何在Python异步中运行具有阻塞行为的方法?方法来自tesseract库中的OCR

时间:2019-06-18 21:12:13

标签: python tesseract python-asyncio

我有一个异步编程器,必须运行一个阻止功能而不阻止事件循环。该功能的执行大约需要4秒钟。不幸的是,我不能让它这么长时间阻止事件循环。

下面的代码说明了我想做什么。

image = Image.open(image_path)                                   
result = await loop.run_in_executor(None, image_to_string(image ))

但是我遇到错误:

TypeError: 'str' object is not callable

您能告诉我这段代码有什么问题吗?如何获得期望的行为?

1 个答案:

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