python多線程有幾種實現方法

gf67 9年前發布 | 6K 次閱讀 Python

python多線程有幾種實現方法,都是什么?

        目前python 提供了幾種多線程實現方式 thread,threading,multithreading ,其中thread模塊比較底層,而threading模塊是對thread做了一些包裝,可以更加方便的被使用。2.7版本之前python對線程的支 持還不夠完善,不能利用多核CPU,但是2.7版本的python中已經考慮改進這點,出現了multithreading  模塊。threading模塊里面主要是對一些線程的操作對象化,創建Thread的class。

        一般來說,使用線程有兩種模式:

        A 創建線程要執行的函數,把這個函數傳遞進Thread對象里,讓它來執行;
        B 繼承Thread類,創建一個新的class,將要執行的代碼 寫到run函數里面。


第一種 創建函數并且傳入Thread 對象中

    import threading,time  
    from time import sleep, ctime  
    def now() :  
        return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )  

    def test(nloop, nsec):  
        print 'start loop', nloop, 'at:', now()  
        sleep(nsec)  
        print 'loop', nloop, 'done at:', now()  

    def main():  
        print 'starting at:',now()  
        threadpool=[]  

        for i in xrange(10):  
            th = threading.Thread(target= test,args= (i,2))  
            threadpool.append(th)  

        for th in threadpool:  
            th.start()  

        for th in threadpool :  
            threading.Thread.join( th )  

        print 'all Done at:', now()  

    if __name__ == '__main__':  
            main()  

第二種是創建一個新的class,將要執行的代碼 寫到run函數里面。
    import threading ,time  
    from time import sleep, ctime  
    def now() :  
        return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )  

    class myThread (threading.Thread) :  
          """docstring for myThread"""  
          def __init__(self, nloop, nsec) :  
              super(myThread, self).__init__()  
              self.nloop = nloop  
              self.nsec = nsec  

          def run(self):  
              print 'start loop', self.nloop, 'at:', ctime()  
              sleep(self.nsec)  
              print 'loop', self.nloop, 'done at:', ctime()  
    def main():  
         thpool=[]  
         print 'starting at:',now()  

         for i in xrange(10):  
             thpool.append(myThread(i,2))  

         for th in thpool:  
             th.start()  

         for th in thpool:  
             th.join()  

         print 'all Done at:', now()  

    if __name__ == '__main__':  
            main()  

 本文由用戶 gf67 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!