用子类修补猴子

时间:2016-06-28 08:00:40

标签: python cherrypy monkeypatching

上下文: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

这个例子不起作用 - 无限循环: - )

这是正确的做法吗?这有可能吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

UPD(2016年10月1日):

pull request(2016年9月4日合并,可用于CherryPy >= 8.1)引入了一种指定会话类的新方法。 像这样的Smth应该满足你的需求:

import cherrypy

class Root:
    ...

class LockingSession(sessions.RamSession):
    def get(self, *args, **kwargs):
        # acquire lock
        super(LockingSession).get(*args, **kwargs)
        # release lock

conf = {
    ...,
    'tools.sessions.storage_class': LockingSession,
    ...,
}

cherrypy.quickstart(Root(), '/', conf)

旧答案:

以下应该工作:

from cherrypy.lib import sessions
class LockingSession(sessions.RamSession):
    def get(self, *args, **kwargs):
        # acquire lock
        super(LockingSession).get(*args, **kwargs)
        # release lock

sessions.LockingSession = LockingSession