How to overload modules when using python-asyncio?

I use pyinotify to track file changes and attempt to reload the module where this modified file is located. But, unfortunately, not the module, probably not overloaded, changes that I do not see.

 import sys import asyncio import pyinotify import importlib from aiohttp import web from aa.aa import m_aa class EventHandler(pyinotify.ProcessEvent): def my_init(self, loop=None): self.loop = loop if loop else asyncio.get_event_loop() def process_IN_MODIFY(self, event): pathname = event.pathname name = event.name if name.endswith('.py'): for module in sys.modules.values(): if hasattr(module, '__file__'): if module.__file__ == pathname: importlib.reload(module) def inotify_start(loop): wm = pyinotify.WatchManager() wm.add_watch('/home/test', pyinotify.ALL_EVENTS, rec=True) handler = EventHandler( loop=loop ) pyinotify.AsyncioNotifier(wm, loop, default_proc_fun=handler) async def init(loop): app = web.Application() app.router.add_route('GET', '/', m_aa) handler = app.make_handler() inotify_start(loop) srv = await loop.create_server(handler, '0.0.0.0', 8080) return srv loop = asyncio.get_event_loop() loop.run_until_complete(init(loop)) try: loop.run_forever() except KeyboardInterrupt: pass 

And the code file from the aa.aa module

 from aiohttp import web async def m_aa(request): text = b""" <!DOCTYPE html><meta charset="utf-8" /><html> <head></head> <body> <h3>Reload</h3> </body> </html> """ return web.Response(body=text, content_type="text/html") 

Maybe there is another way, I need to change the code, which does not need to be manually reloaded.

+5
source share
1 answer

You can try aiohttp_autoreload

aiohttp_utils also provides autoload capabilities.

+3
source

All Articles