1. 程式人生 > >多執行緒的簡單應用

多執行緒的簡單應用

前一陣兒用python寫了一個抓取某網站圖片的指令碼,打包成了帶有GUI的可執行程式,介面沒有怎麼設計只是有兩個按鈕,分別抓取兩類圖片,並將抓取的圖片放到當前目錄的上一資料夾。
GUI是用python自帶的庫Tkinter,下面是效果圖:
這裡寫圖片描述

輸入要抓取的網站頁數,然後就會自動抓取相應頁數的圖片,不過在生成GUI時出現了一個問題,就是當點選按鈕的時候會出現GUI無響應的情況,就像下面這樣:

這裡寫圖片描述

只有當圖片抓取完成後圖形介面才會回到正常狀態。從網上查了一下,發現這是因為將邏輯處理和UI放在了一個執行緒中,導致UI重新整理遇到了阻塞,解決方法是用多執行緒將邏輯程式碼與GUI分開執行。可是從網上查詢python多執行緒的知識只是給了幾個簡單的小例子,那GUI中的多執行緒怎麼實現呢?其實也很簡單!我的圖形介面只用到了兩個按鈕,先前我是直接把按鈕繫結到執行邏輯程式碼的函式中,現在我只要繫結到一個新的函式中,在這個函式中開執行緒就可以了。看部分程式碼:

threads = []
Button(root, text="抓取微信", command = weixinthread).pack(side=LEFT)
Button(root, text="抓取QQ", command = QQthread).pack(side=LEFT)
def weixinthread():
    t1 = threading.Thread(target=weixin)
    threads.append(t1)
    t1.setDaemon(1)
    t1.start()

def QQthread():
    t2 = threading.Thread(target=QQ)
    threads.append(t2)
    t2.setDaemon(1
) t2.start()

按鈕繫結兩個執行緒函式,執行緒函式中再去呼叫邏輯函式,這樣再次執行程式就不會出現UI介面卡死的問題了。
這是我第一次在實際應用中用到了多執行緒,雖然只是解決了一個很小的問題,但是也算是在多執行緒這方面有一點收穫。