Some troubles using AsyncioExecutor and gunicorn
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Lisez graphql/execution/executors/asyncio.py, en particulier AsyncioExecutor.wait_until_finished et son appel à loop.run_until_complete. Reproduisez des requêtes concurrentes via la configuration Gunicorn décrite dans l’issue, puis déterminez et testez une solution dans laquelle les requêtes concurrentes ne déclenchent pas RuntimeError: This event loop is already running.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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?
- Langage dominant
- Python
- Étoiles
- 371
- Forks
- 174
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de graphql-python/graphql-core-legacy
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Quiver sourceOuverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
graphql-python/graphql-core-legacy#286 · 3 réactions ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
graphql-python/graphql-core-legacy#280 · 2 commentaires · 1 réaction ·
-
Add support for custom validators in default GraphQL backendPeut-être pris @JoaRiski l’a pris il y a 2444 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
graphql-python/graphql-core-legacy#266 · 1 réaction ·
Toutes les issues de graphql-python/graphql-core-legacy
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
its-me-prash/vwgroup-connect-ha#2019 ·
Les mainteneurs répondent en général sous 1 jour
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
KonstantinStarovoytov/kitden#21 ·
Les mainteneurs répondent en général sous 1 jour
-
RefactorOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
ehmatthes/gh-profiler#166 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
smart-on-fhir/smart-fetch#73 ·
-
good first issue help wanted
Difficulté 1/5 1-3 heures Accessibilité débutants 85/100
RizgarOzan/playcal#13 ·