[英]asyncio 2 workers RuntimeWarning: coroutine 'sleep' was never awaited
[英]Python3.8 asyncio: RuntimeWarning: coroutine was never awaited
我是異步函數的新手,我正在嘗試從外部 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
這是我的協調 function
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)
在給出的解決方案之后,代碼中出現了一個新錯誤:這是跟蹤:
Traceback (most recent call last):
File "manage.py", line 32, in <module>
module.run()
File "/opt/project/providers/api/data_collector.py", line 90, in run
integrator.run()
File "/opt/project/common/integrator.py", line 448, in run
self.start_processing()
File "/opt/project/providers/api/data_collector.py", line 81, in start_processing
products.run()
File "/opt/project/common/data_parser.py", line 94, in run
self.build_dataframe()
File "/opt/project/common/data_parser.py", line 54, in build_dataframe
df = func(self)
File "/opt/project/providers/data_collector.py", line 68, in products_processor_concurrent
return run(async_get_products(data_parser))
File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
return loop.run_until_complete(main)
File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/opt/project/providers/api/data_collector.py", line 57, in async_get_products
tasks = [await client.get_product_by_id(sku) for sku in sku_list]
File "/opt/project/providers/api/data_collector.py", line 57, in <listcomp>
tasks = [await client.get_product_by_id(sku) for sku in sku_list]
TypeError: object dict can't be used in 'await' expression
當你想從同步函數運行異步函數時,你必須使用asyncio
庫來運行它們。 你最后的 function 應該是這樣的。
def products_processor_concurrent(data_parser):
from asyncio import run
return run(async_get_products(data_parser))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.