常识
Convention
__foo__: 这只是一种约定,是Python系统使用不会与用户名冲突的名称的一种方式。
__foo: 这具有实际意义:解释器将此名称替换_classname__foo为确保名称不会与另一个类中的类似名称重叠的方式。
_foo: 这只是一种约定,是程序员指示变量是私有的一种方式(无论在Python中是什么意思)。
1 | class DoubleLine(object): |
线程
Py3中原始的线程引用_thread模块。
local 线程局部变量。
1 | from threading import local |
python 默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样
如果创建线程,并且设置了daemon为true,及threading.setDaemon(True),则主线程执行完毕后自动退出,不会等待子线程的执行结果。而且随着主线程的退出,子线程也消亡
join方法的作用是阻塞,等待子线程结束,join方法有一个参数是timeout,即如果主线程等待timeout,子线程还没有结束,则主线程强制结束子线程。
如果线程daemon属性为False,则join里的timeout参数无效,主线程会一直等待子线程结束。
如果线程daemon属性为True,则join里的timeout参数是有效的,主线程会等待timeout时间后,结束子线程。
1 | from threading import local, Thread |
互斥锁
1 | import threading |
信号量
1 | import threading |
事件
1 | import time |
类常识
- 常识,静态语言不能支持2个相同名字的变量。
1 | class Attr(object): |
冲突,具体跟Python针对slots的实现处理方式有关。
1 | class Attr(object): |
__slots__定义和类变量冲突问题。
1 | class Attr(object): |
1 | class Attr |
__slots__完成对实例变量绑定的限制。【限制是类的实例-这个说法应该是不精确的】
1 | class Attr(object): |
类定义外部绑定属性也会同样的问题。
1 | class Attr(object): |
__slots__完成对实例成员函数绑定的限制。
1 | def set_age(self, age): |
__slots__不限制对class全局变量(类变量)绑定的添加。
1 | class Attr(object): |
- MethodType绑定到类方法后的行为。
1 | def set_name(self, name): |
Flask之Local、LocalStack、LocalProxy
Local解决线程TLS(TlsAlloc)存储无法解决协助之间数据隔离问题而创建的。