Der Betrieb kann nicht ausführen: Ein weiterer Vorgang ist in PyTest durchgeführtPython

Python-Programme
Anonymous
 Der Betrieb kann nicht ausführen: Ein weiterer Vorgang ist in PyTest durchgeführt

Post by Anonymous »

Ich möchte eine Funktion testen, die mit asyncpg funktioniert. Wenn ich jeweils einen Test durchführe, funktioniert es gut. Wenn ich jedoch mehrere Tests gleichzeitig durchführe, stürmen alle Tests mit Ausnahme des ersten mit dem Fehler asyncpg.exceptions._base.InterfaceError: Der Betrieb kann nicht durchgeführt werden: Eine andere Operation ist im Gange .

Code: Select all

@pytest.mark.asyncio
async def test_project_connection(superuser_id, project_id):
data = element_data_random(project_id)

element_id = (await resolve_element_create(data=data, user_id=superuser_id))["id"]
project_elements = (await db_projects_element_ids_get([project_id]))[project_id]

assert element_id in project_elements

@pytest.mark.asyncio
async def test_project_does_not_exist(superuser_id):
data = element_data_random(str(uuid.uuid4()))

with pytest.raises(ObjectWithIdDoesNotExistError):
await resolve_element_create(data=data, user_id=superuser_id)
< /code>
Alle Funktionen für die Arbeit mit DB verwenden Pool.async def (*args):
pool = await get_pool()

await pool.execute(...) # or fetch/fetchrow/fetchval
< /code>
Wie ich den Pool bekomme: < /p>
db_pool = None

async def get_pool():
global db_pool

async def init(con):
await con.set_type_codec('jsonb', encoder=ujson.dumps, decoder=ujson.loads, schema='pg_catalog')
await con.set_type_codec('json', encoder=ujson.dumps, decoder=ujson.loads, schema='pg_catalog')

if not db_pool:
dockerfiles_dir = os.path.join(src_dir, 'dockerfiles')
env_path = os.path.join(dockerfiles_dir, 'dev.env')

try:
# When code and DB inside docker containers
host = 'postgres-docker'
socket.gethostbyname(host)
except socket.error:
# When code on localhost, but DB inside docker container
host = 'localhost'

load_dotenv(dotenv_path=env_path)

db_pool = await asyncpg.create_pool(
database=os.getenv("POSTGRES_DBNAME"),
user=os.getenv("POSTGRES_USER"),
password=os.getenv("POSTGRES_PASSWORD"),
host=host,
init=init
)

return db_pool
Soweit ich unter der Haube verstehe, erstellt Asynсpg eine neue Verbindung und führt die Anforderung in dieser Verbindung aus, wenn Sie die Anforderung über den Pool ausführen. Dies macht deutlich, dass jede Anfrage eine eigene Verbindung haben sollte. Dieser Fehler tritt jedoch auf, was verursacht wird, wenn eine Verbindung versucht, zwei Anforderungen gleichzeitig zu bearbeiten

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post