2012-12-26 56 views
1

我有一個python函數,從S3下載文件到本地驅動器上的某個臨時位置,然後對其進行處理。下載部分如下所示:aws python boto:尋找可靠的方法來中斷get_contents_to_filename

def processNewDataFile(key): 

    ## templocation below is just some temp local path 
    key.get_contents_to_filename(templocation) 
    ## further processing 

此處key是用於下載文件的AWS密鑰。我注意到偶爾get_contents_to_filename似乎凍結。在我的代碼的其他部分,我有一些解決方案,如果這些塊沒有在指定的時間內完成,則會中斷代碼塊(並引發異常)。這個解決方案很難在這裏使用,因爲我需要下載的文件大小不一,有時S3比其他時間響應速度慢。

那麼是否有任何可靠的方式中斷/超時get_contents_to_filename不涉及硬預定的時間限制?

感謝

回答

0

你可以使用一個回調函數get_contents_to_filename

http://boto.cloudhackers.com/en/latest/ref/gs.html#boto.gs.key.Key.get_contents_to_file

回調函數需要兩個參數,發送的字節數和文件的總大小。 您可以指定粒度(回調將被調用的最大次數),儘管我只使用小文件(小於10kb),並且通常只會調用兩次 - 一次是開始,一次是結束。

重要的是,它將在傳輸開始時將文件大小傳遞給回調函數,然後可以根據文件的大小啓動計時器。