Skip to content

Commit 076a014

Browse files
committed
Use our own executor
1 parent f6c0136 commit 076a014

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

pymongo/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"""Python driver for MongoDB."""
1616
from __future__ import annotations
1717

18+
from concurrent.futures import ThreadPoolExecutor
1819
from typing import ContextManager, Optional
1920

2021
__all__ = [
@@ -166,3 +167,6 @@ def timeout(seconds: Optional[float]) -> ContextManager[None]:
166167
if seconds is not None:
167168
seconds = float(seconds)
168169
return _csot._TimeoutContext(seconds)
170+
171+
172+
_PYMONGO_EXECUTOR = ThreadPoolExecutor(thread_name_prefix="PYMONGO_EXECUTOR-")

pymongo/asynchronous/pool.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
)
3939

4040
from bson import DEFAULT_CODEC_OPTIONS
41-
from pymongo import _csot, helpers_shared
41+
from pymongo import _PYMONGO_EXECUTOR, _csot, helpers_shared
4242
from pymongo.asynchronous.client_session import _validate_session_write_concern
4343
from pymongo.asynchronous.helpers import _handle_reauth
4444
from pymongo.asynchronous.network import command, receive_message
@@ -890,7 +890,7 @@ async def _configured_socket(
890890
else:
891891
loop = asyncio.get_running_loop()
892892
ssl_sock = await loop.run_in_executor(
893-
None,
893+
_PYMONGO_EXECUTOR,
894894
functools.partial(ssl_context.wrap_socket, sock, server_hostname=host), # type: ignore[assignment, misc]
895895
)
896896
else:
@@ -901,7 +901,9 @@ async def _configured_socket(
901901
ssl_sock = await ssl_context.a_wrap_socket(sock) # type: ignore[assignment, misc]
902902
else:
903903
loop = asyncio.get_running_loop()
904-
ssl_sock = await loop.run_in_executor(None, ssl_context.wrap_socket, sock) # type: ignore[assignment, misc]
904+
ssl_sock = await loop.run_in_executor(
905+
_PYMONGO_EXECUTOR, ssl_context.wrap_socket, sock
906+
) # type: ignore[assignment, misc]
905907
except _CertificateError:
906908
sock.close()
907909
# Raise _CertificateError directly like we do after match_hostname

pymongo/pyopenssl_context.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from OpenSSL import SSL as _SSL
3232
from OpenSSL import crypto as _crypto
3333

34+
from pymongo import _PYMONGO_EXECUTOR
3435
from pymongo.errors import ConfigurationError as _ConfigurationError
3536
from pymongo.errors import _CertificateError # type:ignore[attr-defined]
3637
from pymongo.ocsp_cache import _OCSPCache
@@ -405,15 +406,15 @@ async def a_wrap_socket(
405406
ssl_conn.set_tlsext_host_name(server_hostname.encode("idna"))
406407
if self.verify_mode != _stdlibssl.CERT_NONE:
407408
# Request a stapled OCSP response.
408-
await loop.run_in_executor(None, ssl_conn.request_ocsp)
409+
await loop.run_in_executor(_PYMONGO_EXECUTOR, ssl_conn.request_ocsp)
409410
ssl_conn.set_connect_state()
410411
# If this wasn't true the caller of wrap_socket would call
411412
# do_handshake()
412413
if do_handshake_on_connect:
413414
# XXX: If we do hostname checking in a callback we can get rid
414415
# of this call to do_handshake() since the handshake
415416
# will happen automatically later.
416-
await loop.run_in_executor(None, ssl_conn.do_handshake)
417+
await loop.run_in_executor(_PYMONGO_EXECUTOR, ssl_conn.do_handshake)
417418
# XXX: Do this in a callback registered with
418419
# SSLContext.set_info_callback? See Twisted for an example.
419420
if self.check_hostname and server_hostname is not None:

pymongo/synchronous/pool.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
)
3939

4040
from bson import DEFAULT_CODEC_OPTIONS
41-
from pymongo import _csot, helpers_shared
41+
from pymongo import _PYMONGO_EXECUTOR, _csot, helpers_shared
4242
from pymongo.common import (
4343
MAX_BSON_SIZE,
4444
MAX_MESSAGE_SIZE,
@@ -886,7 +886,7 @@ def _configured_socket(address: _Address, options: PoolOptions) -> Union[socket.
886886
else:
887887
loop = asyncio.get_running_loop()
888888
ssl_sock = loop.run_in_executor(
889-
None,
889+
_PYMONGO_EXECUTOR,
890890
functools.partial(ssl_context.wrap_socket, sock, server_hostname=host), # type: ignore[assignment, misc]
891891
)
892892
else:
@@ -897,7 +897,9 @@ def _configured_socket(address: _Address, options: PoolOptions) -> Union[socket.
897897
ssl_sock = ssl_context.a_wrap_socket(sock) # type: ignore[assignment, misc]
898898
else:
899899
loop = asyncio.get_running_loop()
900-
ssl_sock = loop.run_in_executor(None, ssl_context.wrap_socket, sock) # type: ignore[assignment, misc]
900+
ssl_sock = loop.run_in_executor(
901+
_PYMONGO_EXECUTOR, ssl_context.wrap_socket, sock
902+
) # type: ignore[assignment, misc]
901903
except _CertificateError:
902904
sock.close()
903905
# Raise _CertificateError directly like we do after match_hostname

0 commit comments

Comments
 (0)