【发布时间】:2023-02-22 05:27:57
【问题描述】:
我一直在为我的 Web 应用程序探索 Polars。到目前为止,它一直令人印象深刻,直到我遇到这个问题,这个问题阻碍了我对这个很棒的库的使用。 用例: 我将镶木地板文件读入 Polars 数据帧,使用此 pl 数据帧为 fastapi 上的获取请求提供结果。
@fastApi.get("/polars-test")
async def polars_test():
polars_df = pl.read_parquet(f"/data/all_area_keys.parquet")
df = polars_df.limit(3)
return df.to_dicts()
polars= 0.16.2
pyarrow=9.0.0
fastapi=0.92.0
BaseDockerImage = tiangolo/uvicorn-gunicorn-fastapi:python3.11
当我将它打包成 docker 镜像并在 gunicorn 上运行 fastapi 应用程序时,此获取路径没有响应。使用 /docs,到达这个终点只会等待几分钟,工作人员终止,不会记录任何错误
我开始认为 Polars 多线程不能很好地处理 Fastapi 的并发性。但是我无法找到相关文件来获得理解。请帮助,绝对不想放弃 Polars。
目前已解决的问题:
- get 请求在我本地测试时完美运行。
- 登录到正在运行的 docker 容器并运行上面的 pl 命令 - 它有效
- 刚刚尝试打印数据框的架构 - 它有效。因此创建了数据框并且元数据可用。仅当我在 polars 数据帧上运行过滤器或 Any transform 时才会出现此问题
- 创建了一个惰性框架并尝试收集,但没有成功
- 从方法中删除异步,运气不好
- 将 python 版本从 3.8 更改为 3.11,没有成功
- 运行 docker 时将平台指定为 linus/amd64,失败
【问题讨论】:
-
如果您将返回更改为诸如“hello world”之类的通用内容而不是返回 dict,这行得通吗?看来您还没有排除问题与极地无关。另外,我不知道 fastapi,但在 Flask 中,我认为你会在实际返回之前
jsonify指令。 -
谢谢。但这没有帮助。我已经在该路径上返回了 DataFrame.schema,这有效。只有当我应用过滤器或限制或路径变得无响应的任何转换时。
-
在每一行上方放置一些日志记录,以便在 read_pq 之前的行中放置“收到的请求”,然后执行 f“loaded pq file with shape= {polars_df.shape}” 等等......另外,尝试一个不同的小文件,这样你就可以尝试没有
limit
标签: python fastapi python-polars