zoukankan      html  css  js  c++  java
  • Python多线程学习(一、线程的使用)

        Python中使用线程有两种方式:函数或者用类来包装线程对象。

    1、  函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:

    import thread  
    def timer(no, interval):  
        cnt = 0  
        while cnt<10:  
            print 'Thread:(%d) Time:%s/n'%(no, time.ctime())  
            time.sleep(interval)  
            cnt+=1  
        thread.exit_thread()
    
      
         
       
    def test(): #Use thread.start_new_thread() to create 2 new threads  
        thread.start_new_thread(timer, (1,1))  
        thread.start_new_thread(timer, (2,2))  
    
       
    if __name__=='__main__':  
        test()  
    

        上面的例子定义了一个线程函数timer,它打印出10条时间记录后退出,每次打印的间隔由interval参数决定。thread.start_new_thread(function, args[, kwargs])的第一个参数是线程函数(本例中的timer方法),第二个参数是传递给线程函数的参数,它必须是tuple类型,kwargs是可选参数。

        线程的结束可以等待线程自然结束,也可以在线程函数中调用thread.exit()或thread.exit_thread()方法。

    2、  创建threading.Thread的子类来包装一个线程对象,如下例:

    import threading  
    import time  
    
    class timer(threading.Thread): #The timer class is derived from the class threading.Thread  
        def __init__(self, num, interval):  
            threading.Thread.__init__(self)  
            self.thread_num = num  
            self.interval = interval  
            self.thread_stop = False  
       
        def run(self): #Overwrite run() method, put what you want the thread do here  
            while not self.thread_stop:  
                print 'Thread Object(%d), Time:%s/n' %(self.thread_num, time.ctime())  
                time.sleep(self.interval)  
        def stop(self):  
            self.thread_stop = True  
             
       
    
    def test():  
        thread1 = timer(1, 1)  
        thread2 = timer(2, 2)  
        thread1.start()  
        thread2.start()  
        time.sleep(10)  
        thread1.stop()  
        thread2.stop()  
        return  
    
       
    if __name__ == '__main__':  
        test()  
    

        就我个人而言,比较喜欢第二种方式,即创建自己的线程类,必要时重写threading.Thread类的方法,线程的控制可以由自己定制。

    threading.Thread类的使用:

    1,在自己的线程类的__init__里调用threading.Thread.__init__(self, name = threadname)

    Threadname为线程的名字

    2, run(),通常需要重写,编写代码实现做需要的功能。

    3,getName(),获得线程对象名称

    4,setName(),设置线程对象名称

    5,start(),启动线程

    6,jion([timeout]),等待另一线程结束后再运行。

    7,setDaemon(bool),设置子线程是否随主线程一起结束,必须在start()之前调用。默认为False。

    8,isDaemon(),判断线程是否随主线程一起结束。

    9,isAlive(),检查线程是否在运行中。

        此外threading模块本身也提供了很多方法和其他的类,可以帮助我们更好的使用和管理线程。可以参看http://www.python.org/doc/2.5.2/lib/module-threading.html

  • 相关阅读:
    Echarts、大屏动态折线图无状态加载
    地图获取城市编码vue-jsonp请求,处理跨域
    将数组中的元素拼接为一个字符串
    vue兄弟组件通信、兄弟组件传值(本人是用的是中央控件作为媒介),并一同解决重负传值、第一未传值
    vue、react动态新增行
    vue-antd 分页pagination相关重置问题
    关闭ESLint警告,本人使用的是vue-antd-pro
    文本长短不一文本长短不一致,css让其左右两侧对齐致,css让其左右两侧对齐
    Maven私服搭建 Nexus
    Maven常用命令
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144739.html
Copyright © 2011-2022 走看看