1

我有一个 python 函数,可以将文件从 S3 下载到本地驱动器上的某个临时位置,然后对其进行处理。下载部分如下所示:

 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方式不涉及硬性预定时间限制?

谢谢

4

1 回答 1

0

您可以使用回调函数get_contents_to_filename

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

回调函数需要两个参数,Bytes Sent 和 Total Size 文件。您也可以指定粒度(回调将被调用的最大次数),尽管我只将它用于小文件(小于 10kb)并且它通常只被调用两次——一次在开始时,一次在结束时。

重要的是它会在传输开始时将文件的大小传递给回调函数,然后它可以根据文件的大小启动一个计时器。

于 2013-01-29T17:43:20.540 回答