Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLAlchemy using the same session across threads in the same async function

The question basically boils down to whether the following is safe, assuming there is a new SQLAlchemy session s being created everytime this function is invoked:

async def func(s: Session):
  loop = asyncio.get_running_loop()
  await loop.run_in_executor(None, some_func, s)
  await loop.run_in_executor(None, some_other_func, s)
  ...

I'm thinking that it is safe because even though the session is used in (potentially) two different threads in the two run_in_executor calls, those two calls are not concurrent, since the second call won't be executed until the first one completes. This means the session is not accessed concurrently. Am I right in thinking that?

like image 1000
ljiatu Avatar asked Nov 20 '25 04:11

ljiatu


1 Answers

Got a response from Mike Bayer himself (thanks again for the fast response!): https://github.com/sqlalchemy/sqlalchemy/issues/5828. TLDR is that yes it is safe as long as the access is not concurrent.

like image 94
ljiatu Avatar answered Nov 21 '25 16:11

ljiatu