method connect hangs until driver is used in another thread · Issue #408 · oracle/python-oracledb (original) (raw)
Hello!
My application starts multiple threads and every thread is trying to connect to different oracle database, using this module (2.4.1) in thin mode.
So every thread is creating his own independent connection.
It turned out that method connect hangs until driver is used in another thread.
To be more specific - until driver is creating connection in another thread, which may take a while bc of network or load issues.
I have made research and found out that it hangs in this place in command "manager.condition.wait()"
But funny part is if i comment out this string ( manager.condition.wait() ) - it works perfectly fast and well ! :)
So... Why? :)
def get_manager(requested_thin_mode=None):
"""
Returns the manager, but only after ensuring that no other threads are
attempting to initialize the mode.
NOTE: the current implementation of the driver only requires
requested_thin_mode to be set when initializing the thick mode; for this
reason the error raised is specified about a thin mode connection already
being created. If this assumption changes, a new error message will be
required.
"""
with manager.condition:
if manager.thin_mode is None:
if manager.requested_thin_mode is not None:
manager.condition.wait() # this place
if manager.thin_mode is None:
if requested_thin_mode is None:
manager.requested_thin_mode = True
else:
manager.requested_thin_mode = requested_thin_mode
elif (
requested_thin_mode is not None
and requested_thin_mode != manager.thin_mode
):
errors._raise_err(errors.ERR_THIN_CONNECTION_ALREADY_CREATED)
return manager