python - werkzeug(或celery)中关于Proxy的这段注释是什么意思?
PHPz
PHPz 2017-04-18 09:33:52
0
1
329

celery的源码local.py中有这么一个类Proxy,作者说是Code stolen from werkzeug.local.Proxy.,我核对了一下,代码确实是一样的,其中有这么一个方法:

def _get_current_object(self):        
    """Return the current object.  This is useful if you want the real       
    object behind the proxy at a time for performance reasons or because     
    you want to pass the object into a different context."""                         
    loc = object.__getattribute__(self, '_Proxy__local')                             
    if not hasattr(loc, '__release_local__'):                                        
        return loc(*self.__args, **self.__kwargs)                                    
    try:  # pragma: no cover                                                         
        # not sure what this is about                                                
        return getattr(loc, self.__name__)                                           
    except AttributeError:  # pragma: no cover                                       
        raise RuntimeError('no object bound to {0.__name__}'.format(self))

注释说这个方法有助于性能提升,还可以在不同的context中的传递对象。

我想问一下,这个函数或者说用Proxy提升性能的原理是什么?

望不吝赐教,谢谢!

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
黄舟

Il peut y avoir quelques problèmes avec la compréhension de la question ici. L'auteur n'a pas parlé d'amélioration des performances, mais de raisons de performances. Parce que Proxy est un proxy isolé par thread, donc lorsque vous utilisez Proxy, le L'application doit utiliser les objets correspondants, tels que current_app, doit être proxy une fois. L'obtention de l'objet proxy nécessite une surcharge. Si vous appelez cette méthode : _get_current_object pour obtenir l'objet réel, il n'y aura aucune surcharge de proxy lors de son utilisation. . Dans ce cas, on peut dire que _get_current_object est appelé pour des raisons de performances.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal