python中线程的使用

线程启动之后,会执行一个函数,当该函数执行完之后,线程也就结束了,该函数只被执行一次。
下面我以问题的形式,给出一些我的理解。

想让线程不停地运行,该怎么实现?一般有2种方法:
(1)在该线程执行的函数中,设置一个死循环,即while true。当线程调用该函数时,则该函数就会陷入了死循环。当满足某种条件之后,可以通过break退出该循环。本blog中介绍的“双线程高效下载问题”和“多线程概述”中给出的代码,都是这种方法。
(2)重写线程中的run方法中,设置一个死循环,即while true,其他和方法一类似。

那如何实现每隔一段时间执行一次线程,即线程定时触发执行?
可以通过在线程的循环中设置一个sleep方法,如time.sleep(30),则该线程每隔30秒之后就休眠,放弃cpu的使用权,30秒之后,再加入线程队列,等待调用。即实现了我们的定时触发线程的效果。

python使用线程是非常方便的,通过调用threading模块就可以立刻使用。

下面给出一个python中thread的demo,可以复制,然后保存就可以运行。该demo是通过重写run方法,在run中使用while true来循环,并在run中使用sleep(30),来实现定时触发。

[python]  view plain copy
  1. #!/usr/bin/python  
  2. # -*-coding:utf-8 -*-  
  3. import sys;  
  4. import os;  
  5. import time;  
  6. import threading;  
  7. class MTimerClass(threading.Thread):  # cookie监控时钟  
  8.     def __init__(self,fn,args=(),sleep=1):          
  9.         threading.Thread.__init__(self)  
  10.         self.fn = fn    
  11.         self.args = args    
  12.         self.sleep = sleep   
  13.         self.setDaemon(True)  
  14.           
  15.         self.isPlay = True  #当前是否运行   
  16.         self.fnPlay = False #当前已经完成运行  
  17.         self.thread_stop=False;   
  18.           
  19.     def SetSleep(self,sleep): # 重新设置 时间间隔  
  20.         self.sleep=sleep;  
  21.           
  22.     def __do(self):  
  23.         self.fnPlay = True;  
  24.         apply(self.fn,self.args);  
  25.         self.fnPlay = False   
  26.   
  27.     def run(self):   
  28.         while self.isPlay :   
  29.             if self.thread_stop==True:  
  30.                 break;  
  31.             #if SubCommon.ifexeStop==True:  #可以外部调用 来关掉线程。  
  32.             #    print 'thread break'  
  33.             #    break;    
  34.             #print self.sleep;  
  35.             time.sleep(self.sleep)   
  36.             self.__do();  
  37.               
  38.     def stop(self):    
  39.         #stop the loop    
  40.         self.thread_stop = True;  
  41.         self.isPlay = False;   
  42.         while True:  
  43.             if not self.fnPlay : break               
  44.             time.sleep(0.01)  
  45.   
  46. def GetSearchinfo():  
  47.     print 'hhhhh...';  
  48.     # to do  
  49.     pass;  
  50.       
  51. def main():  
  52.     tCheck=MTimerClass(GetSearchinfo, '',  60);  
  53.     tCheck.setDaemon(True); # 随主线程一起结果  
  54.     tCheck.start();         #线程启动  
  55.   
  56. if __name__== "__main__":  
  57.     main();  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值