python - 如何在 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
你能告诉我这段代码有什么问题吗?我怎样才能得到想要的行为?
解决方案
你几乎做对了。问题是它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)
推荐阅读
- javascript - 如何在 Rails 6 和 webpacker 中使用 morris.js?
- java - HTTP Webserver 忽略 POST 请求的最后一行
- r - 在 R 的多个数据框中创建一个变量
- python - 对于每个类别,如何找到与另一列的最小值对应的列的值?
- javascript - React js“TypeError:无法读取null的属性'样式'”和许多javascript错误
- excel - 如何将相同部分的数据从 232 张表复制到表中?
- flutter - where 子句在 firestore flutter 中不起作用
- r - 在 R 中使用多个条件过滤条件
- reactjs - 流程错误:无法从值位置引用类型`updatePreviewSelection` [1]
- amazon-web-services - 在 Terraform 中使用 Secrets Manager 和 Lambda 轮换设置 RDS Aurora Serverless 集群