Some troubles using AsyncioExecutor and gunicorn
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 35/100
Rechercherichtung
Lesen Sie graphql/execution/executors/asyncio.py, insbesondere AsyncioExecutor.wait_until_finished und den Aufruf von loop.run_until_complete. Reproduzieren Sie konkurrierende Anfragen über die im Issue beschriebene Gunicorn-Konfiguration und ermitteln und testen Sie eine Lösung, bei der konkurrierende Anfragen nicht RuntimeError: This event loop is already running auslösen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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, 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:
def wait_until_finished(self):
while self.futures:
futures = self.futures
self.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?
- Vorherrschende Sprache
- Python
- Sterne
- 371
- Forks
- 174
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus graphql-python/graphql-core-legacy
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
-
Quiver sourceOffen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
graphql-python/graphql-core-legacy#286 · 3 Reaktionen ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
graphql-python/graphql-core-legacy#280 · 2 Kommentare · 1 Reaktion ·
-
Add support for custom validators in default GraphQL backendEvtl. vergeben @JoaRiski hat das vor 2445 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
graphql-python/graphql-core-legacy#266 · 1 Reaktion ·
Alle Issues in graphql-python/graphql-core-legacy
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
didi/helixharness#18 ·
-
request-theme
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
LizardByte/ThemerrDB#9883 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
NousResearch/hermes-agent#149885 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Set cache_ok = True on GUID TypeDecorator to enable SQLAlchemy query cachingEvtl. vergeben @patelshivani2283-lab hat das heute übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 91/100
fedora-infra/anitya#2157 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
Project-MONAI/MONAI#9258 ·
Maintainer antworten meist innerhalb von 3 Tagen