多线程
主要是记住几个函数,threading.active_count(),threading.enumerate(),threading.current_thread()。新建一个线程是threading.Thread(),其中参数target不能是一个函数,应该传一个函数名,如果要传数据,使用args参数。
1 | # -*- coding:utf-8 -*- |
队列
其实这里我省略了,每个added_thread都可以append到一个threads的列表里,然后对这个列表遍历。感觉没实际意义。
1 | # -*- coding:utf-8 -*- |
Lock
1 | # -*-coding:utf-8 -*- |
GIL 全局锁问题
尽管Python完全支持多线程编程, 但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。 实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。 GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势 (比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行)。