python之threading多執行緒的簡單使用

2021-10-05 05:23:46 字數 2034 閱讀 2652

在使用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 的形...