Python 使用新的azure.storage.blob包解决文件上载的超时错误

Python 使用新的azure.storage.blob包解决文件上载的超时错误,python,azure-storage-blobs,Python,Azure Storage Blobs,我必须升级一个docker容器,该容器使用旧版本的microsoft azure python包从api下载数据,然后将json上载到azure Blob存储。因此,由于不再允许以前的“azure”元软件包的pip安装,我必须使用新的独立软件包(azure storage blob==12.6.0) 从集成在旧“azure”包中的blockblobservice中的函数“create_blob_from_path”切换到新的独立包和BlobClient.upload()在较大的文件上失败,超时错

我必须升级一个docker容器,该容器使用旧版本的microsoft azure python包从api下载数据,然后将json上载到azure Blob存储。因此,由于不再允许以前的“azure”元软件包的pip安装,我必须使用新的独立软件包(azure storage blob==12.6.0)

从集成在旧“azure”包中的blockblobservice中的函数“create_blob_from_path”切换到新的独立包和BlobClient.upload()在较大的文件上失败,超时错误完全忽略函数的超时参数

我收到一个ServiceResponseError,消息为“连接中止/写入操作超时”

有没有办法解决这个错误


新函数感觉像是从创建路径向后退了一大步,缺少进度回调主要是令人遗憾的…

我用下面的代码进行了测试,它成功上传了文件(~10M)

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
# Create a blob client using the local file name as the name for the blob
blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)

# Upload content to block blob
with open(SOURCE_FILE, "rb") as data:
    blob_client.upload_blob(data, blob_type="BlockBlob")

我用下面的代码进行了测试,它成功地上传了文件(~10M)

blob_service_client = BlobServiceClient.from_connection_string(connect_str)
# Create a blob client using the local file name as the name for the blob
blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)

# Upload content to block blob
with open(SOURCE_FILE, "rb") as data:
    blob_client.upload_blob(data, blob_type="BlockBlob")

不确定如何设置超时值,下面是一个带有超时设置的上载blob示例:

with open(upload_file_path,"rb") as data:
    blob_client.upload_blob(data=data,timeout=600) # timeout is set to 600 seconds
如果忽略超时,另一个解决方法是可以在块中上载blob,代码如下:

# upload data in chunk
block_list=[]
chunk_size=1024
with open(upload_file_path,'rb') as f:
   
   while True:
        read_data = f.read(chunk_size)
        if not read_data:
            break # done
        blk_id = str(uuid.uuid4())
        blob_client.stage_block(block_id=blk_id,data=read_data) 
        block_list.append(BlobBlock(block_id=blk_id))
        

blob_client.commit_block_list(block_list)

不确定如何设置超时值,下面是一个带有超时设置的上载blob示例:

with open(upload_file_path,"rb") as data:
    blob_client.upload_blob(data=data,timeout=600) # timeout is set to 600 seconds
如果忽略超时,另一个解决方法是可以在块中上载blob,代码如下:

# upload data in chunk
block_list=[]
chunk_size=1024
with open(upload_file_path,'rb') as f:
   
   while True:
        read_data = f.read(chunk_size)
        if not read_data:
            break # done
        blk_id = str(uuid.uuid4())
        blob_client.stage_block(block_id=blk_id,data=read_data) 
        block_list.append(BlobBlock(block_id=blk_id))
        

blob_client.commit_block_list(block_list)

你的文件有多大?还有一个类似的问题,您是否尝试在云中部署该功能?@PamelaPeng是的,我见过类似的问题,但我没有使用visual studio代码,并且从我的本地脚本和docker容器中获得相同的结果。至于文件大小,大概在~10MB左右。您的文件大小是多少?还有一个类似的问题,您是否尝试在云中部署该功能?@PamelaPeng是的,我见过类似的问题,但我没有使用visual studio代码,并且从我的本地脚本和docker容器中获得相同的结果。至于文件大小,它可能在~10MB左右,但与之类似。我注意到,当上传通过我的VPN传输时,我通常会失败,没有“中间人”(这在某种程度上也与你链接的类似问题相呼应)它工作得更好。然而,这是解决办法,而不是解决方案,得到一个超时时间是令人费解的,并且没有办法调整它。那里一定有我遗漏的东西。(例如,上传函数的“timeout”整数获取一个整数,而不是像通常实现的那样,为流程的每个步骤获取一个元组。可能使用kwarg是可能的,但我在源代码中找不到它,或者BlobServiceClient或BlobClient本身)@VincentChalmel,如何设置超时?你能给我们看一下代码吗?@IvanYang和你的一样,我很抱歉,谢谢chunks的建议,如果我以后遇到更多这样的错误,我会记住这一点,作为替代。我的类似。我注意到,当上传通过我的VPN传输时,我通常会失败,没有“中间人”(这在某种程度上也与你链接的类似问题相呼应)它工作得更好。然而,这是解决办法,而不是解决方案,得到一个超时时间是令人费解的,并且没有办法调整它。那里一定有我遗漏的东西。(例如,上传函数的“timeout”整数获取一个整数,而不是像通常实现的那样,为流程的每个步骤获取一个元组。可能使用kwarg是可能的,但我在源代码中找不到它,或者BlobServiceClient或BlobClient本身)@VincentChalmel,如何设置超时?你能给我们看一下代码吗?@IvanYang恐怕和你的一样,谢谢chunks的建议,如果我将来遇到更多这样的错误,我会记住这一点。