我应该怎么做这个gsutil"并行复合上传"警告?

时间:2017-10-31 19:46:09

标签: python gsutil

我正在运行python脚本并使用os库执行gsutil命令,该命令通常在Windows上的命令提示符中执行。我的本地计算机上有一些文件,我想把它放到Google Bucket中,所以我这样做:

导入os

command = 'gsutil -m cp myfile.csv  gs://my/bucket/myfile.csv'
os.system(command)

我收到的消息如下:

  

==>注意:您正在上载一个或多个大文件,如果启用并行组合上载,则会大大加快运行速度。这个   功能可以通过编辑来启用   " parallel_composite_upload_threshold" .boto中的值   配置文件。但请注意,如果你这样做,大文件会   被上传为'复合对象   https://cloud.google.com/storage/docs/composite-objects' _,其中   意味着任何下载此类对象的用户都需要拥有   已安装编译的crcmod(参见" gsutil help crcmod")。这是因为   没有编译的crcmod,计算复合对象的校验和是   如此慢,gsutil禁用复合对象的下载。

我想通过隐藏它来消除这个消息,如果它实际上做了它建议的不相关的od,但是我找不到.boto文件。我该怎么办?

2 个答案:

答案 0 :(得分:3)

gsutil文档的Parallel Composite Uploads部分介绍了如何解决此问题(假设,警告指定,此内容将由具有crcmod模块的客户端使用) :

gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp bigfile gs://your-bucket

要从Python安全地执行此操作,请执行以下操作:

filename='myfile.csv'
gs_bucket='my/bucket'
parallel_threshold='150M' # minimum size for parallel upload; 0 to disable

subprocess.check_call([
  'gsutil',
  '-o', 'GSUtil:parallel_composite_upload_threshold=%s' % (parallel_threshold,),
  'cp', filename, 'gs://%s/%s' % (gs_bucket, filename)
])

请注意,此处您明确提供参数向量边界,而不是依靠shell为您执行此操作;这可以防止恶意或错误的文件名执行不需要的操作。

如果您不知道访问此广告素材内容的客户端将拥有crcmod模块,请考虑在上方设置parallel_threshold='0',这将禁用此支持。

答案 1 :(得分:1)

另一种方法是设置提示在BOTO_PATH中的文件中说的配置。通常为$HOME/.boto

[GSUtil]
parallel_composite_upload_threshold = 150M

要获得最大速度,请安装crcmod C库