boto - 当get_bucket validate为False时,慢set_content_from_file

时间:2016-11-15 21:55:44

标签: python amazon-s3 boto boto3

我正在尝试使用GreenPool上传大约3k个文件(每个1千字节)。

我的问题:

为什么# Defined up front to avoid reconstructing over and over choicemap = {'L': l, 'G': g, 'P': p, 'T': t, 'O': o} # Avoid duplicating input code, infinite loop with break on 'Q' input while True: choice = input('L - Lettuce \nG - Green Beans \nP - Peppers \nT - Tomatoes \nO - Onions \nS - Seasonal Item \nQ - Quit').upper() try: choice = choicemap[choice] except KeyError: if choice == 'Q': break print("{!r} is not a recognized option".format(choice) continue try: quanity = int(input('How Many?')) except ValueError: print("Non-numeric input provided, try again") continue Total += choice * quanity print('Your total so far is $', Total) print('All Done') 来电每次通话需要这么长时间?是什么原因导致与get_bucket()时间进行权衡?我该如何解决它。谢谢!

更多详情:

  • set_content()平均需要30秒,以下get_bucket(validate=True)不到1秒。

  • 我尝试更改为set_content_from_file_name,这已成功将validate=False时间缩短至1秒以内,但get_bucket()的时间缩短至约30秒。我无法在boto docs中找到这种权衡的原因。

代码:

set_content_from_file_name

1 个答案:

答案 0 :(得分:1)

您可以查看get_bucket

的文档
  

如果传递validate=False,则不会向服务发出请求(否)   充电/通讯延迟)。如果您确定,这样做是安全的   存在桶。

     

如果传递了默认validate=True,则向该请求发出请求   服务以确保存在桶。在Boto v2.25.0之前,这个   获取了一个键列表(但最大限制设置为0,始终   在桶中返回一个空列表(&包含更好的错误)   消息),费用增加。截至Boto v2.25.0,现在这个   执行HEAD请求(更便宜但更糟糕的错误消息)。

此后当你拨打set_contents_from_filename时,需要打开s3键进行阅读,这时它会向s3发出请求。

回到您关于上传大量文件的问题,并且由于您使用boto3标记了问题,我建议您转到boto3并查看Transfer Manager