erdewit/nest_asyncio

nest_asyncio.apply() cause pyppeteer hangs and cpu 100%

QGB opened this issue · 2 comments

QGB commented
import nest_asyncio;nest_asyncio.apply()  # add this line,  program hangs
import pyppeteer,asyncio
w8="ws://127.0.0.1:9222/devtools/browser/9a23f54e-8338-4166-9f3c-bbc6629c17a4"
loop=asyncio.get_event_loop()
connection =pyppeteer.connection.Connection(w8,loop,0)	   

async def af():
	r=await connection.send('Target.getBrowserContexts')  
	print(r)
	return
loop.run_until_complete(af())

when I press ctrl+c, traceback is

>>python C:/test/atest.py
Traceback (most recent call last):
  File "C:/test/atest.py", line 34, in <module>
    loop.run_until_complete(af())
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    self._run_once()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 123, in _run_once
    handle._run()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 190, in run
    ctx.run(self._callback, *self._args)
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 148, in step
    step_orig(task, exc)
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 249, in __step
    result = coro.send(None)
  File "C:\QGB\Anaconda3\lib\site-packages\pyppeteer\connection.py", line 70, in _async_send
    while not self._connected:
KeyboardInterrupt
2020-11-29:10:51:53,257 ERROR    [base_events.py:1604] Task exception was never retrieved

QGB commented
>python C:/test/atest.py
Traceback (most recent call last):
  File "C:/test/atest.py", line 34, in <module>
    loop.run_until_complete(af())
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    self._run_once()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 123, in _run_once
    handle._run()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 190, in run
    ctx.run(self._callback, *self._args)
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 148, in step
    step_orig(task, exc)
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 249, in __step
    result = coro.send(None)
  File "C:\QGB\Anaconda3\lib\site-packages\pyppeteer\connection.py", line 71, in _async_send
    await asyncio.sleep(self._delay)
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 585, in sleep
    await __sleep0()
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 579, in __sleep0
    yield
KeyboardInterrupt
2020-11-29:11:16:53,569 ERROR    [base_events.py:1604] Task exception was never retrieved
future: <Task finished coro=<Connection._async_send() done, defined at C:\QGB\Anaconda3\lib\site-packages\pyppeteer\connection.py:69> exception=KeyboardInterrupt()>
Traceback (most recent call last):
  File "C:/test/atest.py", line 34, in <module>
    loop.run_until_complete(af())
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 89, in run_until_complete
    self._run_once()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 123, in _run_once
    handle._run()
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 190, in run
    ctx.run(self._callback, *self._args)
  File "C:\QGB\Anaconda3\lib\site-packages\nest_asyncio.py", line 148, in step
    step_orig(task, exc)
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 249, in __step
    result = coro.send(None)
  File "C:\QGB\Anaconda3\lib\site-packages\pyppeteer\connection.py", line 71, in _async_send
    await asyncio.sleep(self._delay)
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 585, in sleep
    await __sleep0()
  File "C:\QGB\Anaconda3\lib\asyncio\tasks.py", line 579, in __sleep0
    yield
KeyboardInterrupt


This doesn't seem to be related to nest_asyncio at all, without it still hangs with 100% CPU.

Btw, the 100% CPU is caused by pyppeteer using a sleep of zero inside a loop. It's better to use a small non-zero sleep (like asyncio.sleep(0.001)).