我正在使用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)
答案 0 :(得分:1)
更好的解决方案是在目标Blob上使用get_blob_properties
方法来检查复制操作的状态。
您可以查看copy_blob
源代码,如以下屏幕截图所示:
因此,在您的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),不支持您在帖子中使用的第三方网址。