У меня есть приложение-функция Azure, которое считывает большие двоичные объекты, а затем обрабатывает их. Я получаю это предупреждение Unclosed client session
Main вызывает функцию getblob, используя await
import logging
from ..shared import blobOpsAIO
import azure.functions as func
import pandas as pd
from ..shared import invOps
import sys, os
async def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
req_body = req.get_json()
file_name_path = req_body.get("file_name_path", "")
file_name = req_body.get("file_name", "")
account_id = req_body.get("account_id", "")
inv = await getBlob(file_name_path, file_name, container_name=account_id)
#process inv
Загрузка файла получить блоб:
async def getBlob(blobPathName, LOCALFILENAME, dtype_param = None, container_name = 'somevalue', blob_type = 'csv', encoding='UTF-8', skiprows=0, header=0, sep=','):
df = pd.DataFrame()
# some validations
df = await read_blob_content(connection_string, container_name, blobPathName, blob_type, LOCALFILENAME, dtype_param, encoding, skiprows, header, sep)
# do something with df
return df
async def read_blob_content(connection_string, container_name, blob_name, blob_type, LOCALFILENAME, dtype_param, encoding, skiprows=0, header=0, sep = ","):
async with aiohttp.ClientSession() as session:
blob_client = BlobClient.from_connection_string(
conn_str=connection_string,
container_name=container_name,
blob_name=blob_name
)
print(f'Going to fetch blobPathName: {blob_name}')
blob_data = await blob_client.download_blob()
async with aiofiles.open(LOCALFILENAME, "wb") as my_blob:
data = await blob_data.readall()
await my_blob.write(data)
await session.close() # also tried placing this line one level up in the identation
success = True
#open the file using pandas and process
return df
except Exception as e:
print(str(e))
raise e
Я пытался добавить/удалить await session.close(), но безуспешно. Также размещение строки на том же уровне идентификации, что и async with aiohttp.ClientSession() as session.






Я могу получить ожидаемый результат без какого-либо предупреждающего сообщения, используя приведенный ниже код.
import logging
import azure.functions as func
import pandas as pd
import aiohttp
import aiofiles
from azure.storage.blob import BlobClient
connection_string='*********';
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route = "http_trigger")
async def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
try:
req_body = req.get_json()
file_name_path = req_body.get('file_name_path')
file_name = req_body.get('file_name')
account_id = req_body.get('account_id')
inv = await get_blob(file_name_path, file_name, container_name=account_id)
# Process inv
return func.HttpResponse(f"File {file_name} downloaded and processed successfully!", status_code=200)
except Exception as e:
logging.error(str(e))
return func.HttpResponse("An error occurred while processing the request.", status_code=500)
async def get_blob(file_name_path, file_name, dtype_param=None, container_name='test', blob_type='csv', encoding='UTF-8', skiprows=0, header=0, sep=','):
df = pd.DataFrame()
try:
df = await read_blob_content(
connection_string,
container_name, file_name, blob_type, file_name_path, dtype_param, encoding, skiprows, header, sep
)
except Exception as e:
logging.error(str(e))
raise e
# Process the dataframe
return df
async def read_blob_content(connection_string, container_name, blob_name,blob_type, file_name_path, dtype_param, encoding, skiprows=0, header=0, sep = ","):
try:
async with aiohttp.ClientSession() as session:
blob_client = BlobClient.from_connection_string(
conn_str=connection_string,
container_name=container_name,
blob_name=blob_name
)
logging.info(f'Going to fetch blobPathName: {blob_name}')
blob_data = blob_client.download_blob()
async with aiofiles.open(file_name_path, mode='wb') as my_blob:
data = blob_data.readall()
await my_blob.write(data)
except Exception as e:
logging.error(str(e))
raise e
# Read the file using pandas and process
df = pd.read_csv(file_name_path, dtype=dtype_param, encoding=encoding, skiprows=skiprows, header=header, sep=sep)
return df
требования.txt
azure-functions
pandas
aiohttp
aiofiles
azure-storage-blob

