And*_*sad 9 python amazon-s3 aws-sdk boto3
对于S3线程安全,boto3是低级客户端吗?文档没有明确说明.
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#client
Github讨论了类似的问题
https://github.com/boto/botocore/issues/1246
但仍然没有维护者的回答.
Ska*_*kam 10
如果您查看boto3 的多线程/处理文档,您可以看到他们为每个会话推荐一个客户端,因为实例之间存在可以由各个线程进行突变的共享数据.
对于这个确切的问题,它看起来还有一个开放的github问题.https://github.com/boto/botocore/issues/1246
我最近尝试使用单个 boto 客户端实例使用 concurrent.futures.ThreadPoolExecutor. 我遇到了来自 boto 的异常。在这种情况下,我认为 boto 客户端不是线程安全的。
我得到的例外
File "xxx/python3.7/site-packages/boto3/session.py", line 263, in client
aws_session_token=aws_session_token, config=config)
File "xxx/python3.7/site-packages/botocore/session.py", line 827, in create_client
endpoint_resolver = self._get_internal_component('endpoint_resolver')
File "xxx/python3.7/site-packages/botocore/session.py", line 694, in _get_internal_component
return self._internal_components.get_component(name)
File "xxx/python3.7/site-packages/botocore/session.py", line 906, in get_component
del self._deferred[name]
Run Code Online (Sandbox Code Playgroud)
小智 5
从文档:
低级客户端是线程安全的。使用低级客户端时,建议实例化您的客户端,然后将该客户端对象传递给您的每个线程。
客户端的实例化不是线程安全的,而实例是线程安全的。为了使事情在多线程环境中工作,将实例化放在全局锁中,如下所示:
boto3_client_lock = threading.Lock()
def create_client():
with boto3_client_lock:
return boto3.client('s3', aws_access_key_id='your key id', aws_secret_access_key='your access key')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4977 次 |
| 最近记录: |