-
Notifications
You must be signed in to change notification settings - Fork 253
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Automatically handle parallel queries with an async Lock
#852
Comments
Hi, |
I don't think this is solution will work if need to work within the same connection transaction, which is my requirement. |
Indeed, transactions will get lost with that. |
Any progress on this? An |
Is your feature request related to a problem?
When performing two "parallel" queries via
asyncio.gather
, an error is thrown:RuntimeError: readexactly() called while another coroutine is already waiting for incoming data
Describe the solution you'd like
I have implemented a simple yet effective way to remedy this issue however it's quite "gross", requiring monkey patching as I am unable to perform the required changes in a type safe manner:
I recommend this feature to be standard on the base cursor, as it's often time impossible to avoid parallel queries happening at the same time.
Describe alternatives you've considered
Another option would involve the connection holding an instance of
asyncio.Queue
to orchestrate any parallel queries going out, however I personally believe this is overkill and is not as simple to understand as a lock.Another option I considered is subclassing each of the
Pool
,Connection
andCursor
class to injectLockedCursor
when callingconnection.cursor
, however that has proven to be very difficult and full of boilerplate and repetitive code to override the constructor and other methods simply to add a lock.Additional context
I am willing to help prepare a PR if this is a solution that the maintainers would approve of. I am also willing to discuss other potential solutions and approaches.
Code of Conduct
The text was updated successfully, but these errors were encountered: