我正在运行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文件。我该怎么办?
答案 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库