从一个大的 azure table 中获取数据以及如何避免超时错误?
Fetch data from a large azure table and how to avoid timeout error?
我正在尝试从大型 Azure Table 获取数据,几个小时后 运行 出现以下错误:
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
以下是我的代码:
from azure.storage import TableService,Entity
from azure import *
import json
from datetime import datetime as dt
from datetime import timezone, timedelta
ts=TableService(account_name='dev',account_key='key')
i=0
next_pk=None
next_rk=None
N=10
date_N_days_ago = datetime.now(timezone.utc) -timedelta(days=N)
while True:
entities=ts.query_entities('Events',next_partition_key=next_pk,next_row_key=next_rk,top=1000)
i+=1
with open('blobdata','a') as fil:
for entity in entities:
if (entity.Timestamp) > date_N_days_ago:
fil.write(str(entity.DetailsJSON)+'\n')
with open('1k_data','a') as fil2:
if i%5000==0:
fil2.write('{}|{}|{}|{}'.format(i,entity.PartitionKey, entity.Timestamp,entity.DetailsJSON+'\n'))
if hasattr(entities,'x_ms_continuation'):
x_ms_continuation=getattr(entities,'x_ms_continuation')
next_pk=x_ms_continuation['nextpartitionkey']
next_rk=x_ms_continuation['nextrowkey']
else:
break;
此外,如果有人对如何以更好的方式实现此过程有更好的想法,请务必告知,因为 table 非常大,代码处理时间太长。
这种异常有时会发生在各种网络调用中。它应该是完全短暂的。我建议简单地捕获错误,稍等片刻,然后重试。
Azure Storage Python Library 最近移动了,我们将在未来几个月对其进行大量改进,包括内置重试策略。因此,将来库本身会为您重试这些错误。
一般来说,如果您想加快速度,可以尝试在实体处理中添加一些多线程。甚至并行写入两个不同的文件也很有帮助。
我正在尝试从大型 Azure Table 获取数据,几个小时后 运行 出现以下错误:
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
以下是我的代码:
from azure.storage import TableService,Entity
from azure import *
import json
from datetime import datetime as dt
from datetime import timezone, timedelta
ts=TableService(account_name='dev',account_key='key')
i=0
next_pk=None
next_rk=None
N=10
date_N_days_ago = datetime.now(timezone.utc) -timedelta(days=N)
while True:
entities=ts.query_entities('Events',next_partition_key=next_pk,next_row_key=next_rk,top=1000)
i+=1
with open('blobdata','a') as fil:
for entity in entities:
if (entity.Timestamp) > date_N_days_ago:
fil.write(str(entity.DetailsJSON)+'\n')
with open('1k_data','a') as fil2:
if i%5000==0:
fil2.write('{}|{}|{}|{}'.format(i,entity.PartitionKey, entity.Timestamp,entity.DetailsJSON+'\n'))
if hasattr(entities,'x_ms_continuation'):
x_ms_continuation=getattr(entities,'x_ms_continuation')
next_pk=x_ms_continuation['nextpartitionkey']
next_rk=x_ms_continuation['nextrowkey']
else:
break;
此外,如果有人对如何以更好的方式实现此过程有更好的想法,请务必告知,因为 table 非常大,代码处理时间太长。
这种异常有时会发生在各种网络调用中。它应该是完全短暂的。我建议简单地捕获错误,稍等片刻,然后重试。
Azure Storage Python Library 最近移动了,我们将在未来几个月对其进行大量改进,包括内置重试策略。因此,将来库本身会为您重试这些错误。
一般来说,如果您想加快速度,可以尝试在实体处理中添加一些多线程。甚至并行写入两个不同的文件也很有帮助。