See http://bugs.python.org/issue25074 for proposed fix for forgotten tasks
as well as other problems related to writing info on python shutdown stage.




On Mon, Oct 26, 2015 at 2:43 AM Oleg K <[email protected]> wrote:

> Hello!
>
> during shutdown AIO prints useful info about "forgotten" tasks..
> but. the time when it is doing that is too late, and all modules get
> unloaded
> so it is hard to build good trace info.
>
> here is an example which shows the issue:
>
> import asyncio
> import inspect
> import logging
> import sys
>
> class ExceptionFormatter(logging.Formatter):
>     def formatException(self, exc_info):
>         print('---->>> MODULES during shutdown %d'  % len(sys.modules))
>         frame = inspect.currentframe()
>         fi = inspect.getframeinfo(frame)
>         return super().formatException(exc_info)
>
> fh = logging.StreamHandler()
> f = ExceptionFormatter('%(asctime)s|%(levelname)s|%(message)s|',
>                               '%d/%m/%Y %H:%M:%S')
> fh.setFormatter(f)
> root = logging.getLogger()
> root.setLevel(logging.DEBUG)
> root.addHandler(fh)
>
> print('MODULES during runtime %d' % len(sys.modules))
>
> loop = asyncio.get_event_loop()
> async def task():
>     print('i am task.. press Ctrl+C to see the issue')
>     raise RuntimeError('Oh Oh')
>
> myself = loop.create_task(task())
> loop.run_forever()
>
>
>
> why is that a problem? -
> because, for instance if i try to use "inspect"
> and call it there - it will fail at line 721:
>
> /home/http/Python-3.5.0/lib/python3.5/inspect.py
>
> ...
> if file in modulesbyfile:
>     return sys.modules.get(modulesbyfile[file])
> # Check the main module
>  HERE>>>> main = sys.modules['__main__']
> if not hasattr(object, '__name__'):
> ...
>
>
> it assumes that there is module "__main__", but it does not exist during
> shutdown!
>
> please advice on how to approach the issue?
> what should i do to have good inspection and logging?
>
-- 
Thanks,
Andrew Svetlov

Reply via email to