मैं फ़ाइल परिवर्तनों को ट्रैक करने के लिए 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
और कोड फ़ाइल हो सकता है कि कुछ अन्य तरीका है, मैं मैन्युअल रूप से फिर से लोड करने नहीं था कोड बदलने की जरूरत है।