Python多线程及其基本使用方法实例分析

  

本文实例讲述了Python多线程及其基本使用方法。分享给大家供大家参考,具体如下:

  

学习Python的多线程(多线程),至少应该要有进程与线程的基本概念,可以参考:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html。

  

  

执行一个程序,即在操作系统中开启了一个进程,在某一时刻,一个CPU内核只能进行一个进程的任务,现在的计算机所说的多进程/多任务其实是通过加快的CPU的执行速度来实现的,因为一个CPU每秒能执行上亿次的计算,能够对进程进行很多次切换,所以在人为可以感知的时间里,看上去,计算机确实是在同时执行多个程序,即同时处理多个进程。
  一个进程中可以包含有多个线程,这多个线程为实现该进程的某个主要功能而运行着,多个线程可以进行串行工作,也可以并发同时进行工作,显然后者可以节省更多的时间。

  

在Python中是支持多线程并发执行的,只是Python中的多线程只能利用单核,也就是Python中说的某一个进程的多个线程只能在一个CPU核心上运行,而不能分配在多个CPU核心中运行,这是考虑到线程安全的缘故,而Python中的吉尔则保证了线程安全。关于Python中的吉尔,可以参考下面一篇文章:《浅析Python的吉尔和线程安全》。

  

下面是自己在学习过程中的一些课堂笔记,因为还没有真正学习一些理论,所以可能会有些错误,但目前是方便自己的理解:

  
  

即GLI是以CPU核心为单位来控制全局锁,所以是不能跨不同的CPU(核心)的GLI可以保证同一个进程中,某一个线程的共享数据在某一时刻只能同时被另外一个线程修改(使用),而不能同时被多个线程修改(使用),如果去掉GLI,则需要自己为线程加锁,这样之后,性能比原来还要差。

  

当然,难道就不能充分利用多核CPU或多个CPU了?

  

做成多进程就可以了,不同的进程运行在不同的CPU(核心)上,也可以实现并发,只是这样的话就会比较浪费内存空间,考虑同时运行10个QQ程序的情况,假如1个QQ占用500的内存空间,则10个QQ就要占用5 g的内存空间了。但如果是多线程的话,可10个QQ还能是共享着这500米的内存空间。还有一个缺点就是,多进程间的数据直接访问可能会比较麻烦,但其实也是可以实现的,比如铬浏览器就是用多进程实现的。

     

目前首先要明确的是,Python中是不能把一个进程的多个线程分布在不同的CPU核心上运行的。

  

  

给出下面的程序代码及注释:

        进口线程# Python多线程模块   导入的时间   def运行(num):   打印“嗨,我是线程% s . .lalala ' % num   time . sleep (1)   因为我在范围(20):   t=线程。线程(目标=运行参数=(我))#多线程使用方法,目标为需要执行多线程的函数,arg游戏为函数中的参数,注意这里的参数写成(我),即如果只能一个参数,也要加上一个”、“   t.start() #开始执行多线程      之前      

程序运行结果如下:

  
  

xpleaf@xpleaf-machine:/mnt/hgf/Python/day6 Python thread4美元。py
  嗨,我是线程0 . .lalala
  嗨,我是线程1 . .lalala
  嗨,我是线程2 . .lalala
  嗨,我是线程3 . .lalala
  嗨,我是线程4 . .lalala
  嗨,我是线程5 . .lalala
  嗨,我是线程6 . .lalala
  嗨,我是线程7 . .lalala
  嗨,我是线程8 . .lalala
  嗨,我是线程9 . .lalala
  嗨,我是线程10 . .lalala
  嗨,我是线程11 . .lalala
  嗨,我是线程12 . .lalala
  嗨,我是线程13 . .lalala
  嗨,我是线程14 . .lalala
  嗨,我是线程15 . .lalala
  嗨,我是线程16 . .lalala
  嗨,我是线程17 . .lalala
  嗨,我是线程18 . .lalala
  嗨,我是线程19 . . lalala

     

直接看执行结果是看不出什么的,这里说一下这个程序的执行过程:0到19是同时打印输入的,在打印19后,程序睡眠1秒后才结束程序的运行。

  

上面这个程序有20个线程执行,每个线程都是:打印字符串+(1)睡觉。我们实际看到的结果是0到19日同时打印,然后才睡1秒,但是需要注意的是,并非是20个线程才执行一次睡眠(1),而是在每个线程中都执行了一次睡眠(1),即该程序实际上是执行了20次(1)睡觉,而我们实际看到的结果是程序运行时仅仅是暂停了1秒,那是因为这20次睡眠(1)是并发执行的。

  

Python多线程及其基本使用方法实例分析