Python 线程高级篇 threading 模块的使用

创建一个tread实例,给他传一个函数

 1 #!/usr/bin/python
 2 import  threading 
 3 from time  import *
 4 loops =[4,2]
 5 def  loop (nloop ,nsec):
 6    print ('start loop ',nloop,'at:', ctime())
 7    sleep(nsec)
 8    print ('loop', nloop ,'done at:', ctime())
 9 def main():
10     print ('starting at:',ctime())
11     threads=[]
12     nloops=range(len(loops))
13     for i in nloops:
14         t=threading.Thread(target=loop,args=(i, loops[i]))
15         threads.append(t)
16     for i in nloops:
17        threads[i].start()
18     for i in nloops:
19         threads[i].join()
20     print ('all done at:',ctime())
21 if  __name__=='__main__':
22     main()
23    

创建一个tread实例给他传入一个可调用的类的实例

 1 #!/usr/bin/python
 2 import  threading 
 3 from time  import *
 4 loops=[4,2]
 5 class ThreadFunc(object):
 6     def  __init__(self,func,args,name=''):
 7         self.name=name
 8         self.func=func
 9         self.args=args
10     def __call__(self):
11          self.func(*self.args)
12 def    loop(nloop ,nsec):
13    print ('start loop ', 'at:',ctime())
14    sleep(nsec)
15    print ('loop',nloop,'done at',ctime())
16 def main():
17     print ('starting at:',ctime())
18     threads=[]
19     nloops=range(len(loops))
20     for i in  nloops:
21            t=threading.Thread(target=ThreadFunc(loop ,(i,loops[i]),loop.__name__))
22 
23            #t=threading.Thread(target=loop,args=(i, loops[i]))
24            threads.append(t)
25     for i  in nloops:
26         threads[i].start()
27     
28     print  ('all done at :',ctime())
29     
30 if   __name__=='__main__':
31      main()

理解的代码:

 1 loops=[4,2]
 2 from time import *
 3 def    loop(nloop ,nsec):
 4    print ('start loop ', 'at:',ctime())
 5    sleep(nsec)
 6    print ('loop',nloop,'done at',ctime())
 7    
 8 class ThreadFunc(object):
 9 
10     def  __init__(self,func,args,name=''):
11         self.name=name
12         self.func=func
13         self.args=args
14     def __call__(self):
15         self.func(*self.args)  
16       
17 for i in  range(2):
18     target=ThreadFunc(loop ,(i,loops[i]),loop.__name__)
19     
20     #target=(对象 ,一个参数 ,名字)
21     print (target)
22     print (target.name)
23     print (target.func)
24     #print (target.args)
25     print (loop.__name__)
26 target()
27 print   (target())
28 
29 
30 
31 
32    #t=threading.Thread(target=loop,args=(i,loops[i]))
33   #t=threading.Thread(target=ThreadFunc(loop ,(i,loops[i]),loop.__name__))
34     #t=threading.Thread(target=loop,args=(i, loops[i]))
35     

关于__call__(self )的使用

1 #!/usr/bin/poython
2 class  ybl:
3   def __init__(self ,name):
4         self.name=name
5   def __call__(self):
6        print  (self.name)
7 b=ybl('zx')
8 print (b.name)
9 b()