You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My web app has many api (not only have graphql, but also some rest-api), I am using graphql-core 2.3.2 provided AsyncioExecutor as Executor, and use Gunicorn as WSGI server in production.
The problem is when broswer send some requests concurrently , AsyncioExecutor will raise a error: RuntimeError: This event loop is already running.
After my debugging, I found that it was because AsyncioExecutor.wait_until_finished call loop.run_until_complete, then run_until_complete will check current loop if closed or running, and raise the error.
A worker of Gunicorn have some threads, those threads shares a event loop, and when a event loop is running, another concurrently request also call run_until_complete will raise RuntimeError, so they can't work well concurrently.
My solutions is create a event loop in a single thread, then call loop.run_forever(), and rewrite AsyncioExecutor.wait_until_finished as after:
defwait_until_finished(self):
whileself.futures:
futures=self.futuresself.futures= []
# self.loop.run_until_complete(wait(futures))asyncio.run_coroutine_threadsafe(wait(futures), self.loop) # I added this line
it works, but this needs to edit the code of graphql-core package, is there a better solution?
The text was updated successfully, but these errors were encountered:
Hello!
My web app has many api (not only have graphql, but also some rest-api), I am using graphql-core 2.3.2 provided AsyncioExecutor as Executor, and use Gunicorn as WSGI server in production.
The problem is when broswer send some requests concurrently , AsyncioExecutor will raise a error:
RuntimeError: This event loop is already running
.After my debugging, I found that it was because AsyncioExecutor.wait_until_finished call
loop.run_until_complete
, thenrun_until_complete
will check current loop if closed or running, and raise the error.A worker of Gunicorn have some threads, those threads shares a event loop, and when a event loop is running, another concurrently request also call
run_until_complete
will raise RuntimeError, so they can't work well concurrently.My solutions is create a event loop in a single thread, then call
loop.run_forever()
, and rewrite AsyncioExecutor.wait_until_finished as after:it works, but this needs to edit the code of graphql-core package, is there a better solution?
The text was updated successfully, but these errors were encountered: