python threading 模块类总结

1、print 函数不是线程安全的。logging 系列方法时,deque.Queue 线程安全队列。

2、python 线程对象的daemon属性继承自父线程,主线程的daemon属性是 False. 所谓 daemon 即父线程退出时,子线程立即退出。而非 deamon 子线程;父线程会等待子线程退出时才退出。

3、threading.Event 类,线程间同步工具类之一。内部维持一个状态标志,默认未置位,需要显示的调用 set 方法设置,clear 方法清空。wait(timeout=None) 阻塞到其他线程设置标志位,或者超时 timeout 秒数。如果从不设置标志位,wait(5) 相当于 time.sleep(5).  返回值为 True 表示在超时之前,状态被设置;False 表示未被设置。

4、local 类(threading.Lock 本身是一个工厂函数),线程局部对象类,注意仅仅是为该类对象添加的属性是线程局部的,local 类对象本身需要全局的。C++11中的关键字 thread_local 在全局作用域声明的对象是线程局部的。

5、threading.Timer 类,继承自 threading.Thread 类。定时器,注册一个定时回调的函数;在 .start 方法调用后开始计时;超时之后调用回调。

6、threading.lock 类,线程之间互斥锁。对应 acquire(blocking=True,timeout=-1) 和 release 两个方法。acquire 时候默认是阻塞的直到获得锁;此时返回True。可设置阻塞阻塞的时间,在超时之前,获得锁都会返回True;否则返回 False。

7、threading.RLock 类,可重入锁。reentraint Lock,同一个线程内可连续多次 acquire、递归 acquire.不过不能夸线程释放,本线程 acquire 之后,在其他线程 release 将报错 RuntimeError。意即在 release 之前,一定需要在本线程之前被 acquire 过。

8、threading.Condition 类,条件变量类。线程之间的通知机制,可用于生产者和消费者之前的速度不匹配问题。

9、threading.Barrier 类,控制阻塞的线程数量达到指定数量,同时唤醒所有阻塞的线程。

10、threading.Semaphore 类,控制有限个线程能够共享的资源的访问,超过访问数量,额外的线程需要访问信号量需要等待已经获得访问的某一个线程释放。

所有相关文档在 ipython 中通过help(obj),如 help(threading.lock()) 的方式获得。实现了上下文协议的类,可直接使用 with 语句来代替显示的获取释放语义。

Guess you like

Origin blog.csdn.net/zhouguoqionghai/article/details/100629268