Message261440
I am using the following function to force a coroutine to run synchronously:
def await_sync(coro: types.CoroutineType, timeout_s: int=None):
"""
:param coro: a coroutine or lambda loop: coroutine(loop)
:param timeout_s:
:return:
"""
loop = asyncio.new_event_loop() # type: BaseEventLoop
if not is_awaitable(coro):
coro = coro(loop)
if timeout_s is None:
fut = asyncio.ensure_future(coro, loop=loop)
else:
fut = asyncio.ensure_future(asyncio.wait_for(coro, timeout=timeout_s, loop=loop), loop=loop)
loop.run_until_complete(fut)
return fut.result()
def is_awaitable(coro_or_future):
if isinstance(coro_or_future, futures.Future):
return coro_or_future
elif asyncio.coroutines.iscoroutine(coro_or_future):
return True
elif asyncio.compat.PY35 and inspect.isawaitable(coro_or_future):
return True
else:
return False
However, intermittently, it will freeze upon simply trying to create a new loop: loop = asyncio.new_event_loop(). Inspecting the stack traces shows me the exact location where it hangs:
File: "/src\system\utils.py", line 34, in await_sync
loop = asyncio.new_event_loop() # type: BaseEventLoop
File: "\lib\asyncio\events.py", line 636, in new_event_loop
return get_event_loop_policy().new_event_loop()
File: "\lib\asyncio\events.py", line 587, in new_event_loop
return self._loop_factory()
File: "\lib\asyncio\selector_events.py", line 55, in __init__
self._make_self_pipe()
File: "\lib\asyncio\selector_events.py", line 116, in _make_self_pipe
self._ssock, self._csock = self._socketpair()
File: "\lib\asyncio\windows_events.py", line 295, in _socketpair
return windows_utils.socketpair()
File: "\lib\socket.py", line 515, in socketpair
ssock, _ = lsock.accept()
File: "\lib\socket.py", line 195, in accept
fd, addr = self._accept()
I am using Python 3.5.1.
StackOverflow question: http://stackoverflow.com/questions/35861175/what-can-cause-asyncio-to-hang-upon-simply-creating-a-new-loop |
|
Date |
User |
Action |
Args |
2016-03-09 16:22:10 | Erwin Mayer | set | recipients:
+ Erwin Mayer, gvanrossum, vstinner, yselivanov |
2016-03-09 16:22:10 | Erwin Mayer | set | messageid: <1457540530.17.0.125897820678.issue26520@psf.upfronthosting.co.za> |
2016-03-09 16:22:10 | Erwin Mayer | link | issue26520 messages |
2016-03-09 16:22:09 | Erwin Mayer | create | |
|