Python模块简介之threading模块

1、进程与线程

程序包括进程,进程包括线程。

一个程序,至少包括一个进程,因为进程是一个执行特定的功能、具有自己独立的内存资源空间、系统进行资源调度和分配的独立单位。这样来说吧,可以把你的程序.py看做一个进程,符合以上的条件,对不对?但是,也可以这样来看,把你的程序.py看成几个进程的集合,或许这些进程之间相互独立,互不干扰,又或许某些进程结束后,另一些进程才能开始,就像某些函数,一个函数必须依赖另一个函数才能执行,那么这两个函数就可以看做两个进程啊。

一个进程,至少包括一个线程。线程的出现是为了做到计算机的并发处理,一个进程可以包括多个线程,多个线程之间共享同一个进程的内存资源,比如:一个程序F为一个进程,F中有读文件函数R1~R5和写文件函W1~W5,那么Ri和Wi便可以当做多个线程,比如现在要复制一个文件夹fileA的5个文件file1~file5内容到文件夹fileB中,一般的做法是先复制文件file1,然后file2……,所需时间为复制5个文件的时间和;其实我们把Wi和Ri当做线程之后,这5个文件的复制便可以同步进行,所需时间为最大文件的复制时间。

2、threading模块

截图如下:


这里我们介绍类Thread的用法和如何开启线程和关闭线程:

Thread类有以下几个方法:

start()#开启线程的执行

run()#定义线程的功能函数,一旦线程被开启,功能函数自动开始执行,一般会被子类改写

join(timout=None)#程序挂起,就是在join()函数后等待线程的执行结束才执行join()函数以后的程序的内容,如果给定了timeout(不为None),则程序最多挂起时间为timeout,否则一直等到所有线程结束。

getName()#返回线程的名字

setName(name)#设置线程的名字

isAlive()#线程正在运行返回True,否则返回False

isDaemon()#返回线程的Daemon标志

setDaemon(daemon)#设置线程的Daemon标志为daemon,一定要在start()函数执行前执行

找段程序介绍一下它们的用法:(程序如下)

1 #!/usr/bin/env python   '''这一句是告诉系统Python解释器在这个位置'''

3 import threading  '''这一句是导入了模块threading,一般为了下边使用方便,写成:from threading import *  表示导入模块threading中的所有方法或者变量或者对象。 '''
4 from time import sleep, ctime  '''这一句是导入了模块time中的sleep()和ctime()两个函数'''

6 loops = [4,2]  '''指定睡眠时间列表,供函数使用'''

8 def loop(nloop, nsec):  '''定义睡眠函数(循环函数)'''
9 print 'start loop', nloop, 'at:', ctime()  '''ctime()函数返回当前的时间,精确到秒,此为开始时间'''
10 sleep(nsec)  '''执行睡眠函数'''
11 print 'loop', nloop, 'done at:', ctime() '''此为结束时间'''
12 
13 def main(): '''定义main函数'''

14 print 'starting at:', ctime() 

15 threads = [] '''建立线程列表'''
16 nloops = range(len(loops)) 
17 
18 for i in nloops:  '''循环建立线程,并且加入线程表threads中去'''
19 t = threading.Thread(target=loop, args=(i, loops[i])) '''这是实例化一个threading.Thread类的对象作为一个线程,传入参数‘target=函数的名字’,args为一个参数列表或元组,其中元素为函数所需要的参数,args=(函数参数)'''

20
21 threads.append(t) '''将实例加入threads中'''
22 
23 for i in nloops: # start threads 
24 threads[i].start()  '''循环启动各个对象的stat(),虽然是一个一个启动,但是在执行的时候是并发的同时的'''
25 
26 for i in nloops: # wait for all 
27 threads[i].join()  '''等待线程结束'''
28 
29 print 'all DONE at:', ctime() '''打印结束时间'''
30 
31 if __name__ == '__main__':  '''这一句告诉解释器,执行的时候从main()开始
32 main()  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值