python多線程編程

來源:互聯網
上載者:User

標籤:

說起多線程,必然想到了進程、鎖等東西,python跟線程有關的模組有thread模組、threading模組、Queue模組、mutex模組、SocketServer模組。thread模組提供了基本的線程和鎖的支援,但不建議使用,因為當主線程退出的時候,所有其它線程沒有被清除就退出了,而threading模組提供了功能更強的線程管理能力,能確保所有重要的子線程都退出後,進程才結束。Queue模組允許使用者建立一個可以用於多個線程之間共用資料的隊列資料結構。mutex是個互斥對象,SocketServer具有線程式控制制的TCP和UDP管理器。

如果用到了thread模組,在start_new_thread建立一個新的線程之前,可能要allocate_lock分配一個LockType類型的鎖對象,然後去acquire擷取鎖對象,建立線程之後,在新線程中做完某些事情就可以release釋放鎖,通常要在主線程中檢查每個線程鎖locked狀態,當所有鎖release之後主線程結束。

threading模組不必像thread模組那樣操作鎖,只需join使程式掛起即可。threading模組中的Thread類是主要的運行對象,常用的有幾種比較相像的用法,如建立Thread執行個體後傳給它一個函數或一個可調用的類對象(可通過apply()實現_ _call__()),或者是從Thread派生一個子類(重寫run())並建立這個子類的執行個體。下面展示一個簡單的例子,建立兩個線程,Thread執行個體中傳入函數,分別sleep6妙、3妙,主線程顯示運行總時間。

#!/usr/bin/env pythonimport threadingfrom time import sleep, ctimeloops = [6, 3] # sleep secdef loop(nloop, nsec):    print ‘start loop‘, nloop, ‘at:‘, ctime()    sleep(nsec)    print ‘loop‘, nloop, ‘done at:‘, ctime()def main():    print ‘starting at:‘, ctime()    threads = []    nloops = range(len(loops))    for i in nloops:        t = threading.Thread(target = loop, args = (i, loops[i]))        threads.append(t)    for i in nloops:        threads[i].start()    for i in nloops:        threads[i].join()    print ‘all done at:‘, ctime()if __name__ == ‘__main__‘:    main()

下面是運行結果:
starting at: Tue Jun 9 09:56:32 2015
start loop 0 at: Tue Jun 9 09:56:32 2015
start loop 1 at: Tue Jun 9 09:56:32 2015
loop 1 done at: Tue Jun 9 09:56:35 2015
loop 0 done at: Tue Jun 9 09:56:38 2015
all done at: Tue Jun 9 09:56:38 2015
可以看出,主線程時間為子線程時間較長的那個時間,6秒。

python多線程編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.