web-dev-qa-db-fra.com

Le client boto3 est-il thread-safe

Le client de bas niveau boto3 pour S3 est-il sûr pour les threads? La documentation n'est pas explicite à ce sujet.

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#client

Un problème similaire est discuté dans Github

https://github.com/boto/botocore/issues/1246

Mais il n'y a toujours pas de réponse des responsables.

9
Andrey Novosad

Si vous jetez un oeil à la documentation Multithreading/Processing pour boto3, vous pouvez voir qu'ils recommandent un client par session car il existe des données partagées entre les instances qui peuvent être mutées par des threads individuels.

Il semble également qu'il existe un problème de github ouvert pour cette question exacte. https://github.com/boto/botocore/issues/1246

9
Skam

J'ai récemment essayé d'utiliser l'instance de client boto unique à l'aide de concurrent.futures.ThreadPoolExecutor. Je rencontre des exceptions venant de boto. Je suppose que le client boto n'est pas thread-safe dans ce cas.

L'exception que j'ai

  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]
1
Pawel