一、简介:关于多线程

        Python多线程和C/C++多线程利用CPU核不太一样,Python多线程由于GIL存在的原因,只能单核分时间片来轮询运行多个线程,也就是说不管CPU是多少个核,用多线程时候只能是单核,然后多个thread将CPU分为一个个的时间片,一般来说是100条机械码,切换一个线程,轮询着来,时间片到了,就运行下一个线程,周而复始进行。

二、Python多线程方法和属性

    Python多线程用的是threading.Thread直接创建线程,或者继承threading.Thread来创建新的线程类,来进行多线程设计。

    threading.py脚本有很多内建方法和属性提供给用户使用,具体如下例子所示:

python多线程教程 python,多线程_python多线程教程

效果图:

 

python多线程教程 python,多线程_多线程_02

 

三、创建一个线程

利用threading.Thread创建一个线程,并运行,查看结果。

python多线程教程 python,多线程_学习_03

运行效果:

 

python多线程教程 python,多线程_python_04

我们继续往下看:

python多线程教程 python,多线程_python_05

 

效果为:

python多线程教程 python,多线程_学习_06

 

从效果上可以看到,先打印了done,然后才打印线程T1中的数字,也就是主线程相关打印执行完成后,子线程的数字才打印。

继续看:

python多线程教程 python,多线程_python_07

 加入thread1.join()后的效果:

python多线程教程 python,多线程_多线程_08

四、线程中Queue的使用

Queue队列的作用很重要,不管是在python中,还是c/c++中,多线程使用Queue很广泛的,下面针对Queue的使用,演示一个小案例,具体如下:

 

python多线程教程 python,多线程_学习_09

运行结果:

python多线程教程 python,多线程_python多线程教程_10

 

五、线程之Lock锁的使用 

 由于多线程是共用进行的资源,当多个线程同时访问一个资源,比如说文件,有的线程要写,有的线程读,如果没有处理好同步,那么就好造成错乱,再或者说,同一个全局变量,一个线程自加,一个线程自减,当没有进行加锁处理,会造成数据错乱的。

python多线程教程 python,多线程_学习_11

运行结果:

python多线程教程 python,多线程_多线程_12

 

当加锁后的代码如下所示:

python多线程教程 python,多线程_python_13

效果图:

python多线程教程 python,多线程_python_14

 

另外,附几个快捷键,以便忘记。。。

▶ Pycharm中多行注释:Ctrl+/
▶ Pycharm中取消多行注释:再次Ctrl+/
▶ Pycharm中多行缩进:Tab
▶ Pycharm中取消多行缩进:Shift+Tab