【问题标题】:Python3.8 asyncio: RuntimeWarning: coroutine was never awaitedPython3.8 asyncio: RuntimeWarning: 从未等待协程
【发布时间】:2022-11-19 01:59:13
【问题描述】:

我是异步函数的新手,我正在尝试从外部 API 进行多次调用。 concurrent.Futures 不足以检索响应,所以我尝试使用 asyncio 和 httpx,但该过程抛出一个未知错误,并且对我来说很难调试。

协程似乎有一个空值或从未被调用。

这是我的客户

async def get_product_by_id_async(self, product_id: str) -> Response:
        if product_id is None:
            return None
        response_await = await self.async_client.get(
            url=f"{self.base_url}/api/catalog/stock{product_id}",
            headers=self.headers,
        )

        if response_await.status_code == 200:
            response = json.loads(response_await.text)
            return response

这是我的协调功能


async def async_get_products(data_parser):
    path = data_parser.options["path"]
    sku_list = client.run()
    products_list = []
    tasks = [await client.get_product_by_id(sku) for sku in sku_list]
    breakpoint()
    completed = await asyncio.gather(*tasks)
    for product in completed:
        products_list = build_product_df(products_list, product)
    products_df = pd.DataFrame(products_list)
    products_df.to_csv(path, index=False)
    return products_df

def products_processor_concurrent(data_parser):
    return async_get_products(data_parser)

也许我应该叫它不同但我真的很感谢你的帮助

【问题讨论】:

    标签: python pandas api python-asyncio httpx


    【解决方案1】:

    当你想从同步函数运行异步函数时,你必须使用 asyncio 库来运行它们。你的最后一个函数应该是这样的。

    def products_processor_concurrent(data_parser):
        from asyncio import run
        return run(async_get_products(data_parser))
    

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2018-10-26
      • 2021-10-22
      • 2019-12-15
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多