本文实例讲述了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多线程及其基本使用方法实例分析