MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / run_in_greenlet

Method run_in_greenlet

lib/sqlalchemy/util/concurrency.py:305–319  ·  view source on GitHub ↗

Run sync function in greenlet. Support nested calls

(
        self, fn: Callable[..., _T], *args: Any, **kwargs: Any
    )

Source from the content-addressed store, hash-verified

303 return self.runner.run(fn(*args, **kwargs))
304
305 def run_in_greenlet(
306 self, fn: Callable[..., _T], *args: Any, **kwargs: Any
307 ) -> _T:
308 """Run sync function in greenlet. Support nested calls"""
309 _concurrency_shim._initialize(raise_=False)
310
311 if _concurrency_shim._has_greenlet:
312 if self.runner.get_loop().is_running():
313 # allow for a wrapped test function to call another
314 assert in_greenlet()
315 return fn(*args, **kwargs)
316 else:
317 return self.runner.run(greenlet_spawn(fn, *args, **kwargs))
318 else:
319 return fn(*args, **kwargs)
320
321 def close(self) -> None:
322 self.runner.close()

Callers 3

_assume_asyncFunction · 0.80
_maybe_asyncFunction · 0.80

Calls 5

in_greenletFunction · 0.85
greenlet_spawnFunction · 0.85
_initializeMethod · 0.80
get_loopMethod · 0.80
runMethod · 0.45

Tested by

no test coverage detected