从大型azure表中获取数据以及如何避免超时错误?

时间:2015-08-20 19:16:12

标签: python-3.x azure-storage azure-table-storage

我正在尝试从大型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;

此外,如果有人更好地了解如何以更好的方式实现此过程,请告诉我,因为该表非常大并且代码处理时间过长。

1 个答案:

答案 0 :(得分:1)

有时会在各种网络呼叫中发生此异常。它应该是完全短暂的。我建议只是抓住错误,稍等一下,再试一次。

Azure Storage Python Library最近已经移动,我们将在未来几个月内对其进行大量改进,包括内置重试政策。所以,将来图书馆本身会为你重试这些错误。

一般情况下,如果您希望加快速度,可以尝试在处理实体时添加一些多线程。即使并行化写入两个不同的文件也可以提供帮助。