在使用python程式設計的過程中,經常會遇到一些需要使用到多執行緒的問題,可能是為了提高程式的執行效率,但是,更常見的是在編寫介面程式的時候,有時由於我們的方法過於複雜而導致執行慢,經常出現介面卡頓甚至是函式未能正常執行的情況。這個時候,往往使用多執行緒可以解決類似問題。這裡講一下我自己在粗淺使用threading庫時的一些心得。
(ps: 學習過程中多有借鑑大神,致敬)
import time
from threading import thread
在使用threading庫的過程中,比較常見的情況是重構一下thread類。將我們需要進行多執行緒執行的函式作為引數,例項我們構造的類,然後使其開始執行,上**:
class
mythread
(thread)
:def
__init__
(self, func)
:super()
.__init__(
) self.func = func
defrun(self)
: self.func(
)
這種方法的優點在於,我們可以對run()方法重寫,比較靈活;但是實際上,也可以通過直接呼叫thread類進行例項。
通過mythread類:
thread1 = mythread(self.func)
thread1.start(
)
直接通過thread類:thread1 = thread(self.func)
thread1.start(
)
和上面基本相同,思路也是重構thread類,只不過需要引數和返回值的情況,在重構的過程中,不僅需要重構run()方法,還需要寫乙個get_result()方法,**如下:
class
mythread
(threading.thread)
:def
__init__
(self, func,
*args,
**kwargs)
:super
(mythread, self)
.__init__(
) self.func = func
self.args = args
self.kwargs = kwargs
defrun(self)
: self.result = self.func(
*self.args,
**self.kwargs)
defget_result
(self)
:try
:return self.result
except exception as e:
return
none
def
a(a, l=1)
: time.sleep(
0.5)
return a+l
s = time.time(
)thread1 = mythread(a,
1, l=2)
thread1.start(
)print
(time.time(
)- s)
while thread1.get_result()is
none
: thread1.get_result(
)print
(thread1.get_result())
執行效果:
0.0009975433349609375
3
通過這種方式,可以將我們傳入多執行緒的程式的執行結果送出,但是據我一位"老師"所說,這種方式算是野路子,因為,送入多執行緒的程式,一般情況下不要求傳出返回值。
對於thread的使用,由於個人不是科班出身,對於這個庫的理解十分有限,使用上,多參考網上大神的用法,可能有部分理解不到位,望指出。謝謝各路大神~
python中的執行緒使用 threading模組
最近又用到了python中的多執行緒程式設計,前段時間使用並學習過,但是由於長時間不用,慢慢就忘記怎麼用了,畢竟對執行緒的使用還不是很熟練,現在總結一下,記錄下來,加深一下學習的印象。python中關於執行緒,主要有兩個模組thread和threading,其中thread的模組已不建議使用,因為t...
11 2 Python多執行緒threading
分程序設定 工具 threading包 1 先寫需要分程序執行的函式或者類 defmaigic pass 2 例項化threading,得到新的程序 threadone threading.thread target maigic 此時還可以接受arg引數import threading impor...
Python3併發程式設計之threading模組
建立執行緒物件 threading.thread 引數 引數 描述group none 該類中的待擴充套件引數。target none 目標函式,即被開闢執行緒的執行任務。預設值為none,表示什麼都不執行。name none 該執行緒的名稱。在預設情況下,執行緒的唯一名稱以 thread n 的形...