在运行default_storage.exists()
时,我遇到了使用S3Boto后端的django-storages
的内存泄漏
我在看这里的文件: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html
以下是我的设置文件的相关部分:
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
以下是我要重复的问题:
^{pr2}$我想到的唯一可能的问题是,我的S3存储桶中有93000个条目—我想知道.exists是否只是为了检查而下载整个文件列表?如果是这样,肯定还有别的办法吗?不幸的是,sorl thumbnail在生成新缩略图时使用了这个.exists()函数,这导致缩略图生成非常缓慢。在
更新(2017年1月23日)
为了避免这种情况,您只需在创建
Storage
时传递preload_metadata=False
,或者在设置中设置AWS_PRELOAD_METADATA = False
。在感谢@r3mot在评论中的建议。在
原始答案
实际上,这是因为
S3BotoStorage.exists
调用了S3BotoStorage.entries
,如下所示:处理这种情况的最佳方法是将
^{pr2}$S3BotoStorage
子类化,如下所示:你只需要把这个子类放到你的应用程序的一个模块中,然后通过你的设置模块中的虚线路径引用它。这个子类的唯一缺点是,对3个重写方法中的任何一个的每次调用都将导致一个web请求,这可能不是什么大问题。在
相关问题 更多 >
编程相关推荐