如何在python

时间:2019-06-16 13:55:04

标签: python azure-storage-blobs

我正在使用for循环将URL中的文件复制到azure blob,我的问题是我不知道如何告诉函数等到操作完成后再开始下一个

当前我正在使用此解决方法

import re
from azure.storage.blob import BlockBlobService
block_blob_service = BlockBlobService(account_name='xxxxx',
                                      account_key='xxxxxxxxxx')
from urllib.request import urlopen
import time
container_name ='yyyyyyyyyyy'



url = "http://nemweb.com.au/Reports/Current/Daily_Reports/"
result = urlopen(url).read().decode('utf-8')

pattern = re.compile(r'[\w.]*.zip')
filelist = pattern.findall(result )
for x in filelist:
      block_blob_service.copy_blob(container_name,x,url+x)
      time.sleep(60)

1 个答案:

答案 0 :(得分:1)

更好的解决方案是在目标Blob上使用get_blob_properties方法来检查复制操作的状态。

您可以查看copy_blob源代码,如以下屏幕截图所示:

enter image description here

因此,在您的for循环代码中,您可以编写如下内容:

for x in filelist:
    block_blob_service.copy_blob(container_name,x,url+x)
    copy_status = block_blob_service.get_blob_properties(container_name,x)

    #use code below to check the copy status, if it's completed or not.
    while(str(copy_status.properties.copy.status) != "success"):
        copy_status = block_blob_service.get_blob_properties(container_name,x)

顺便说一句: 另外,您还可以注意到copy_blob方法有一个requires_sync参数,如果将其分配给True,则复制操作是同步操作,可以确保下一个操作将等到上一个操作完成。但是目前,它仅适用于Azure存储帐户上的Blob副本Blob(从Blob到To Blob),不支持您在帖子中使用的第三方网址。