2016-07-13 47 views
5

我正在使用pyinotify來跟蹤文件更改並嘗試將此修改文件所在的模塊超載。 但不幸的是,不是模塊可能沒有超載,我不可見的變化。從模塊aa.aa如何在使用python-asyncio時重載模塊?

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

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 

和代碼文件也許有一些其他的方式,我需要改變的代碼沒有手動刷新。

回答