{"id":910,"hash":"33ce6896d923b2173f0618a9c998396cf1b066a94f8c0eafb6fe76172f3f347e","pattern":"asyncpg - cannot perform operation: another operation is in progress","full_message":"I am attempting to resolve the following error:\n\nasyncpg.exceptions._base.InterfaceError: cannot perform operation: another operation is in progress\n\nHere is the full traceback:\n\nTraceback (most recent call last):\n\n  File \"<string>\", line 1, in <module>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/multiprocessing/spawn.py\", line 116, in spawn_main\n    exitcode = _main(fd, parent_sentinel)\n               │     │   └ 4\n               │     └ 7\n               └ <function _main at 0x109c8aca0>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/multiprocessing/spawn.py\", line 129, in _main\n    return self._bootstrap(parent_sentinel)\n           │    │          └ 4\n           │    └ <function BaseProcess._bootstrap at 0x109b1f8b0>\n           └ <SpawnProcess name='SpawnProcess-4' parent=36604 started>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/multiprocessing/process.py\", line 315, in _bootstrap\n    self.run()\n    │    └ <function BaseProcess.run at 0x109b18ee0>\n    └ <SpawnProcess name='SpawnProcess-4' parent=36604 started>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/multiprocessing/process.py\", line 108, in run\n    self._target(*self._args, **self._kwargs)\n    │    │        │    │        │    └ {'config': <uvicorn.config.Config object at 0x109cd55b0>, 'target': <bound method Server.run of <uvicorn.server.Server object...\n    │    │        │    │        └ <SpawnProcess name='SpawnProcess-4' parent=36604 started>\n    │    │        │    └ ()\n    │    │        └ <SpawnProcess name='SpawnProcess-4' parent=36604 started>\n    │    └ <function subprocess_started at 0x10a4aca60>\n    └ <SpawnProcess name='SpawnProcess-4' parent=36604 started>\n  File \"/Users/ddd/Desktop/repos/xxx/.venv/lib/python3.8/site-packages/uvicorn/subprocess.py\", line 61, in subprocess_started\n    target(sockets=sockets)\n    │              └ [<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 80)>]\n    └ <bound method Server.run of <uvicorn.server.Server object at 0x109cd56a0>>\n  File \"/Users/ddd/Desktop/repos/xxx/.venv/lib/python3.8/site-packages/uvicorn/server.py\", line 48, in run\n    loop.run_until_complete(self.serve(sockets=sockets))\n    │    │                  │    │             └ [<socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 80)>]\n    │    │                  │    └ <function Server.serve at 0x10a4abca0>\n    │    │                  └ <uvicorn.server.Server object at 0x109cd56a0>\n    │    └ <function BaseEventLoop.run_until_complete at 0x10a205820>\n    └ <_UnixSelectorEventLoop running=True closed=False debug=False>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/base_events.py\", line 603, in run_until_complete\n    self.run_forever()\n    │    └ <function BaseEventLoop.run_forever at 0x10a205790>\n    └ <_UnixSelectorEventLoop running=True closed=False debug=False>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/base_events.py\", line 570, in run_forever\n    self._run_once()\n    │    └ <function BaseEventLoop._run_once at 0x10a209310>\n    └ <_UnixSelectorEventLoop running=True closed=False debug=False>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/base_events.py\", line 1859, in _run_once\n    handle._run()\n    │      └ <function Handle._run at 0x10a13ed30>\n    └ <Handle <TaskWakeupMethWrapper object at 0x10bb75a60>(<_GatheringFu...in progress')>)>\n  File \"/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/events.py\", line 81, in _run\n    self._context.run(self._callback, *self._args)\n    │    │            │    │           │    └ <member '_args' of 'Handle' objects>\n    │    │            │    │           └ <Handle <TaskWakeupMethWrapper object at 0x10bb75a60>(<_GatheringFu...in progress')>)>\n    │    │            │    └ <member '_callback' of 'Handle' objects>\n    │    │            └ <Handle <TaskWakeupMethWrapper object at 0x10bb75a60>(<_GatheringFu...in progress')>)>\n    │    └ <member '_context' of 'Handle' objects>\n    └ <Handle <TaskWakeupMethWrapper object at 0x10bb75a60>(<_GatheringFu...in progress')>)>\n\n> File \"./xxx/xxx/xxx.py\", line 144, in get_disclosure_data\n    hh_json, db_json = await asyncio.gather(*coroutines)\n                             │       │       └ [<coroutine object xxxx at 0x10bb2cb40>, <coroutine object db_call at 0x10bb2cc40>]\n                             │       └ <function gather at 0x10a1fad30>\n                             └ <module 'asyncio' from '/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/__init__.py'>\n\n  File \"./xxx/xxx/xxx.py\", line 52, in db_call\n    db_json = await asyncio.gather(*coroutines, loop=asyncio.get_event_loop())\n                    │       │       │                │       └ <built-in function get_event_loop>\n                    │       │       │                └ <module 'asyncio' from '/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/__init__.py'>\n                    │       │       └ [<coroutine object DBConnectionManager.fetch_item at 0x10bb434c0>, <coroutine object DBConnectionManager.fetch_item at 0x10bb...\n                    │       └ <function gather at 0x10a1fad30>\n                    └ <module 'asyncio' from '/Users/ddd/.pyenv/versions/3.8.6/lib/python3.8/asyncio/__init__.py'>\n\n  File \"./xxx/xxx/xx.py\", line 97, in fetch_item\n    await self._connection_pool.release(self.con)\n          │    │                │       │    └ <PoolConnectionProxy [released] 0x10bbc9cd0>\n          │    │                │       └ <chd_api.data.db.DBConnectionManager object at 0x10b946a30>\n          │    │                └ <function Pool.release at 0x10b956a60>\n          │    └ <asyncpg.pool.Pool object at 0x10bb131e0>\n          └ <chd_api.data.db.DBConnectionManager object at 0x10b946a30>\n\n  File \"/Users/ddd/Desktop/repos/xxx/.venv/lib/python3.8/site-packages/asyncpg/pool.py\", line 666, in release\n    return await asyncio.shield(ch.release(timeout))\n                 │       │   ","ecosystem":"pypi","package_name":"python-3.x","package_version":null,"solution":"The assignment to self.con in fetch_item causes multiple coroutines to share the same connection. While you do want them to share the connection pool, sharing the same connection doesn't make sense, as the connection is stateful.\n\nTo resolve the issue, replace usage of self.con with a local variable con.","confidence":0.95,"source":"stackoverflow","source_url":"https://stackoverflow.com/questions/66444620/asyncpg-cannot-perform-operation-another-operation-is-in-progress","votes":30,"created_at":"2026-04-19T04:51:59.335010+00:00","updated_at":"2026-04-19T04:51:59.335010+00:00"}