首页 > 解决方案 > 有没有办法异步运行 pandas run_sql_query?

问题描述

我正在使用n查询从 Postgres 数据库中读取数据。这些查询中的每一个都可能需要相当长的时间在数据库上执行,所以我想异步执行它们。

我正在尝试通过async模块完成此操作,但没有运气

class Test:

    async def collect_items(self, conn_):
        await pd.read_sql_query(items_query_string, conn_)

    async def test_items(self, conn_):
        self.item_df = self.collect_items(conn_)

    async def collect_stockout(self, conn_):
        await pd.read_sql_query(stockout_query_string), conn_)

    async def test_stockout(self, conn_):
        self.so_df = self.collect_stockout(conn_)

    async def _collect_all_async(self, conn_):
        await asyncio.gather(self.test_items(conn_), self.test_stockout(conn_))

    def collect_all(self, conn_):
        asyncio.run(self._collect_all_async(conn_))

但是,当我打电话时,collect_all我想等待所有查询完成,但事实并非如此,因为它会立即返回而没有正确设置self.item_dfself.so_df

为什么会这样?

标签: pythonpandasasynchronousasync-await

解决方案


推荐阅读