我正在运行一个python脚本,并使用os
库执行一个gsutil
命令,该命令通常在gsutil
上的命令提示符中执行。我在本地计算机上有一些文件,我想把它放到Google Bucket
中,所以我这样做了:
导入操作系统
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禁止复合对象的下载。
我想通过隐藏这条消息来消除它,如果它实际上不需要做它所建议的事情,但是我找不到.boto文件。我该怎么办?
发布于 2017-10-31 19:54:25
并行复合上传文档的gsutil
部分描述了如何解决这个问题(如警告所指定的那样,假设客户端将使用此内容,并有可用的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'
,这将禁用这种支持。
发布于 2020-08-23 18:58:10
另一种方法是设置提示在BOTO_PATH
文件中显示的配置。通常是$HOME/.boto
。
[GSUtil]
parallel_composite_upload_threshold = 150M
要获得最高速度,请安装crcmod
C库
https://stackoverflow.com/questions/47043441
复制相似问题