2016-07-13 17 views
5

Ich verwende , um Dateiänderungen zu verfolgen und zu versuchen, das Modul zu überlasten, in dem sich diese geänderte Datei befindet. Aber leider ist das Modul wahrscheinlich nicht überlastet, die Änderungen sind nicht sichtbar.Wie überlasten Module bei Verwendung von Python-Ascio?

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 

Und Code-Datei aus dem Modul aa.aa

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") 

Vielleicht eine andere Möglichkeit gibt es, ich brauche den Code ändern musste nicht manuell neu zu laden.

Antwort