1. 程式人生 > >2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

Python黑科技

兩行程式碼實現多執行緒操作

學習Python中有不明白推薦加入交流群
                號:960410445
                群裡有志同道合的小夥伴,互幫互助,
                群裡有不錯的視訊學習教程和PDF!

什麼是執行緒?

執行緒(thread)存在於程序(process)中,每個執行緒都是程序中的一個例項(instance)。換而言之,執行緒是每個程式執行的基本單位,是程序的一部分。

什麼,程序是啥?程序就是程式的例項。比方說,在windows平臺下,如果我們開啟工作管理員,就會發現其第一個標籤為Processes,然後底下就是各個程式的程序:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

所以多執行緒可以幹什麼?

舉個栗子。我們先用以下程式碼建立一個帶有按鈕的tk視窗:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

假設我們想實現一個功能:在按下按鈕時用記事本開啟一個文字檔案。

OK,很簡單,在_click()里加行程式碼,大功告成:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

現在按一下按鈕:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

很完美,好像沒什麼毛病。但是如果我們想再點那個按鈕,甚至拖動視窗的時候,卻發現整個視窗變成了未響應狀態:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

這是因為我們在程式中打開了另一個程序,而程式在等待我們關閉(使用完)這個程序。因此,當我們把記事本關掉之後,一切恢復正常。這個問題該怎麼解決呢?

threading module

我們可以建立一個執行緒。當我們開啟這個執行緒的時候讓它去執行_click()這個命令,從而使其與我們tkinter的主程式互不影響。

在Python中想達到這個目的很簡單。首先我們要import這個叫threading的module:

import threading

然後嘛,就跟所有面向物件的寫法一樣,我們可以例項化一個threading.Thread物件:

t= threading.Thread(...)

括號裡應該填什麼呢?我們需要告訴這個執行緒它要去做的事情。所以我們給它的target引數提供一個function object,也就是_click.

t= threading.Thread(target= _click)

第二步,也是最後一步: 開啟這個執行緒。

t.start()

大功告成。現在我們按下按鈕後,即使不關閉記事本也可以任意拖動原來的視窗了。

以下為完整程式碼:

2行python程式碼打造多執行緒工具,這是史上最強的黑科技?

 

結尾

關於thread的詳細解釋:https://en.wikipedia.org/wiki/Thread_(computing)
Python threading官方文件:
https://docs.python.org/3/library/threading.html