从一个大的 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 最近移动了,我们将在未来几个月对其进行大量改进,包括内置重试策略。因此,将来库本身会为您重试这些错误。

一般来说,如果您想加快速度,可以尝试在实体处理中添加一些多线程。甚至并行写入两个不同的文件也很有帮助。