aiopg: Using "localhost" as host rather than "127.0.0.1 blocks connections
Using the example code from the documentation:
import asyncio
import aiopg
dsn = 'dbname=aiopg user=aiopg password=passwd host=localhost'
async def go():
async with aiopg.create_pool(dsn) as pool:
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 1")
ret = []
async for row in cur:
ret.append(row)
assert ret == [(1,)]
loop = asyncio.get_event_loop()
loop.run_until_complete(go())
Results in this:
$ time python pgtest.py
Traceback (most recent call last):
File "pgtest.py", line 17, in <module>
loop.run_until_complete(go())
File "/usr/lib/python3.5/asyncio/base_events.py", line 466, in run_until_complete
return future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/asyncio/tasks.py", line 241, in _step
result = coro.throw(exc)
File "pgtest.py", line 7, in go
async with aiopg.create_pool(dsn) as pool:
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/utils.py", line 77, in __aenter__
self._obj = yield from self._coro
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/pool.py", line 46, in _create_pool
yield from pool._fill_free_pool(False)
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/pool.py", line 203, in _fill_free_pool
**self._conn_kwargs)
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/utils.py", line 67, in __iter__
resp = yield from self._coro
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/connection.py", line 74, in _connect
yield from conn._poll(waiter, timeout)
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/connection.py", line 239, in _poll
yield from asyncio.shield(cancel(), loop=self._loop)
File "/usr/lib/python3.5/asyncio/futures.py", line 380, in __iter__
yield self # This tells Task to wait for completion.
File "/usr/lib/python3.5/asyncio/tasks.py", line 304, in _wakeup
future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 293, in result
raise self._exception
File "/usr/lib/python3.5/asyncio/tasks.py", line 239, in _step
result = coro.send(None)
File "/home/mikaelk/venvs/csc-backend/lib/python3.5/site-packages/aiopg/connection.py", line 225, in cancel
self._conn.cancel()
psycopg2.OperationalError: asynchronous connection attempt underway
real 1m0.133s
user 0m0.104s
sys 0m0.012s
If I change it to “127.0.0.1” it works perfectly, however.
About this issue
- Original URL
- State: open
- Created 7 years ago
- Comments: 23 (10 by maintainers)
Plz look at my PR #579
It fixes issues when:
SYN
packet, and you’re getting stuck inpoll
If I add and call “wait” function from async psycopg example (http://initd.org/psycopg/docs/advanced.html#asynchronous-support) everything works ok