上下文:cherrypy session当前锁定请求开始并在请求结束时释放锁定。因此并发请求被串行处理并被阻塞。猴子修补子类
是否可以扩展一个类,覆盖一些方法,其中新方法调用父方法,然后猴子修补结果?
例子:
from cherrypy.lib import sessions
class LockingSession(sessions.RamSession):
def get(self, *args, **kwargs):
# acquire lock
super(LockingSession).get(*args, **kwargs)
# release lock
sessions.RamSession = LockingSession
的例子不工作 - 无限循环:-)
请问这是正确的做法。这可能吗?如果是,如何?
我不知道猴子补丁,但我会尝试注入你的班级进入'sessions'模块,而不是替换现有的模块,然后在config中启用它。看看这行https://github.com/cherrypy/cherrypy/blob/master/cherrypy/lib/sessions.py#L784 他们选择在模块中按名称声明的类。你应该使用这个。 – webKnjaZ
以下是使用redis后端的自定义会话类的示例: https://bitbucket.org/webknjaz/blueberrypy-wk/src/cb2753de29c4ec0f1be00baf2e828b35e0939b47/src/blueberrypy/command.py?at=default&fileviewer=file-view-default#command .py-269:270 https://bitbucket.org/webknjaz/blueberrypy-wk/src/cb2753de29c4ec0f1be00baf2e828b35e0939b47/src/blueberrypy/session.py?at=default&fileviewer=file-view-default#session.py-33:91 – webKnjaZ
不知道Mokey补丁:)我知道它是面向方面编程。也许这个线程可以提供帮助:http://stackoverflow.com/questions/286958/any-aop-support-library-for-python – Johan