我正在尝试从大型Azure表中获取数据,并在几个小时后遇到以下错误:
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;
此外,如果有人更好地了解如何以更好的方式实现此过程,请告诉我,因为该表非常大并且代码处理时间过长。
答案 0 :(得分:1)
有时会在各种网络呼叫中发生此异常。它应该是完全短暂的。我建议只是抓住错误,稍等一下,再试一次。
Azure Storage Python Library最近已经移动,我们将在未来几个月内对其进行大量改进,包括内置重试政策。所以,将来图书馆本身会为你重试这些错误。
一般情况下,如果您希望加快速度,可以尝试在处理实体时添加一些多线程。即使并行化写入两个不同的文件也可以提供帮助。