首页 > 解决方案 > 如何在 Python asyncio 中运行具有阻塞行为的方法?方法来自用于 OCR 的 tesseract 库

问题描述

我有异步程序,有必要在不阻塞事件循环的情况下运行阻塞函数。执行此功能大约需要 4 秒。不幸的是,我不能让它阻塞事件循环这么长时间。

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

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

但是我收到错误:

TypeError: 'str' object is not callable

你能告诉我这段代码有什么问题吗?我怎样才能得到想要的行为?

标签: pythontesseractpython-asyncio

解决方案


你几乎做对了。问题是它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)

推荐阅读