2016-07-13 5 views
5

मैं फ़ाइल परिवर्तनों को ट्रैक करने के लिए pyinotify का उपयोग कर रहा हूं और इस संशोधित फ़ाइल में मॉड्यूल को अधिभारित करने का प्रयास करता हूं। लेकिन दुर्भाग्यवश, मॉड्यूल शायद ओवरलोड नहीं किया गया है, जो परिवर्तन मैं दिखाई नहीं दे रहा हूं। मॉड्यूल 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") 

से

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 

और कोड फ़ाइल हो सकता है कि कुछ अन्य तरीका है, मैं मैन्युअल रूप से फिर से लोड करने नहीं था कोड बदलने की जरूरत है।

उत्तर

संबंधित मुद्दे

 संबंधित मुद्दे