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

  • 相关阅读:
    HDU 5115 Dire Wolf (区间DP)
    HDU 4283 You Are the One(区间DP(最优出栈顺序))
    ZOJ 3469 Food Delivery(区间DP好题)
    LightOJ 1422 Halloween Costumes(区间DP)
    POJ 1651 Multiplication Puzzle(区间DP)
    NYOJ 石子合并(一)(区间DP)
    POJ 2955 Brackets(括号匹配一)
    POJ 1141 Brackets Sequence(括号匹配二)
    ZOJ 3537 Cake(凸包+区间DP)
    Graham求凸包模板
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144739.html
Copyright © 2011-2022 走看看