歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python之多線程編程學習筆記

在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。利用線程,用戶可按下一個按鈕,然後程序會立即作出響應,而不是讓用戶等待程序完成了當前任務以後才開始響應。

這裡整理一下Python程序設計中使用多線程的幾種方法。

1. 使用Thread模塊相關的函數實現多線程

先寫兩個函數,work_one ,work_two,我希望把這兩個函數同時執行。

使用Thread模塊的代碼如下:

import thread
from time import sleep
def work_one():
    print 'John starts to work!\n'
    sleep(4)    #模擬工作過程
    print 'John done his work!\n'

def work_two():
    print 'Billy starts to work!\n'
    sleep(6)    #模擬工作過程
    print 'Billy done his work!\n'
def main():
    print '***** main *****\n'
    thread.start_new_thread(work_one,())
    thread.start_new_thread(work_two,())
    sleep(8)
    print '***** all work done! *****\n'
if __name__ == '__main__':
main()

效果圖如下:

main中的sleep(8)是為了防止主線程提前終止,從而殺死運行著的兩個線程。這就好比是限時賽跑,不管有沒有人到達終點,限時一到,比賽結束。

如果希望主線程等所有線程執行完畢後,才終止,如常規的賽跑比賽。我們可以加上為每個線程,加上一把線程鎖。

import thread
from time import sleep
def work_one(lock):
    print 'John starts to work!\n'
    sleep(4)    #模擬工作過程
    print 'John done his work!\n'
    print 'lock1 release!'
    lock.release()
 
   
def work_two(lock):
    print 'Billy starts to work!\n'
    sleep(6)    #模擬工作過程
    print 'Billy done his work!\n'
    print 'lock2 release!'
    lock.release()                #完成工作,打開鎖
   
   
def main():
    print '***** main *****\n'
   
    lock1=thread.allocate_lock()  #申請一個線程鎖
    lock2=thread.allocate_lock()

    lock1.acquire()                #把每個線程鎖鎖上
    lock2.acquire()

   
    thread.start_new_thread(work_one,(lock1,))
    thread.start_new_thread(work_two,(lock2,))

    while lock1.locked():          #檢查鎖是否打開
        pass
    while lock2.locked():
        pass
    print '***** all work done! *****\n'
if __name__ == '__main__':
    main()

效果圖如下:

Copyright © Linux教程網 All Rights Reserved