Gao Conghui

好好学习,天天向上

爬虫,视频处理


LocalProxy作用的一点感悟

这里的LocalProxy是指 werkzeug.local中的一个类

class werkzeug.local.LocalProxy(*local*, *name=None*)[]
Acts as a proxy for a werkzeug local. Forwards all operations to a proxied object. The only operations not supported for forwarding are right handed operands and any kind of assignment.

用法如下

from werkzeug.local import Local
        l = Local()

        # these are proxies
        request = l('request')
        user = l('user')

然后就可以像操作一般的对象一般操作代理了。一般的代理模式会做一些小改动,而此处不同,几乎所有的操作会直接作用在代理的对象上。

看到这的时候有个疑问,既然和一般对象一样了,为什么还需要这个类呢?为啥l('user')不直接返回user而是返回一个代理呢?

思考许久,才发现自己想到了误区里边。这个包本身就是给协程中使用的,本身的local对象也是每个协程拥有各自的local。返回localproxy,每次调用都会是在该协程的local对象中寻找,如果直接返回对象,则失去了其本身的意义。

最近的文章

pyredis中ttl的坑

问题复现在用py-redis 的redis类做redis悲观锁的时候发现了一个问题,ttl方法显示过期(返回None)的时候,redis中key实际上没有消失,大概还能存活0.5秒,但是如果换成strictRedis就没问题了,很有意思。下面是一个简单的复现的代码。r = redis.Redis()lock_name = "test_lock"r.set(lock_name, "test")r.expire(lock_name, 1)t1 = 0t2 = 0while True: #...…

pyredis继续阅读
更早的文章

python随笔--socket关闭之后端口占用的问题

先上一段代码class MyHttpHandler(BaseHTTPRequestHandler): def do_GET(self): print "do get" self.send_response(code=200) self.end_headers() self.wfile.write("hello world")if __name__ == '__main__': serv = TCPServer(('', 2...…

python随笔 socket继续阅读