MagicStack / MagicStack/asyncpg

asyncpg.exceptions._base.InterfaceError: cannot call Connection.fetch(): connection has been released back to the pool

Ouverte
#988 5 commentaires 3 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
8.1k
Forks
468
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

  • asyncpg version: 0.26.0
  • PostgreSQL version: 12.0
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce : NO, from pg docker
    the issue with a local PostgreSQL install?
    : YES,
  • Python version: Python 3.9.13
  • Platform: MAC
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: From tortoise-orm
  • If you built asyncpg locally, which version of Cython did you use?: No
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : YES

I am using Sanic + tortoise-orm,

the test code as below:

image

when runs a query during the Request handler, it runs successfully

while runs in a background task, it report this error:

asyncpg.exceptions._base.InterfaceError: cannot call Connection.fetch(): connection has been released back to the pool

I found when the first time query, through the pool.acquire, got the right <PoolConnectionProxy <asyncpg.connection.Connection object at 0x7fd42102f9e0> 0x7fd3d018e550>

but when go to the background task query , the pool.acquire, got an "released" <PoolConnectionProxy [released] 0x7fd3d018e550>

I am confused how can I got an released PoolConnectionProxy from the same code

[query in the get Request method]
query in get

[query in the background task]
query in task

[the pool connection acquire method]
acquire

[the pool connection release method]
release

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les exemples Sanic et tortoise-orm de gestionnaire de requêtes par rapport à la tâche en arrière-plan dans l’issue, puis suivez les chemins de pool.acquire et pool release montrés dans les captures d’écran. Reproduisez si possible l’erreur PoolConnectionProxy libérée et déterminez si la requête en arrière-plan utilise une connexion après sa libération ; le travail est terminé lorsque la cause et soit une correction côté projet, soit un problème d’utilisation confirmé sont documentés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
postgresql, python
Domaine
backend, databases
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
20/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.