Python自由之路(三)多執行緒處理
今天學習Python的多執行緒機制,在Python中主要使用Threading 模組,當然也有thread模組,只是這裡面的功能比較單一,而Threading 模組是在thread的基礎上進行的擴充套件,就像Python Document 上說的,這是一個Higher-level Threading interface .
用threading模組建立執行緒,主要是對Thread類的例項化,根據建立例項的不同方法,主要使用下面三種:
建立一個Thread 的例項,構造方法中傳入一個函式t=threading.Thread(target=_func_name,args=(引數元組)
建立一個Thread 的例項,構造方法中傳入一個可呼叫的類物件定義一個類class ThreadFunc,類中必須重寫__call__函式供執行緒呼叫t=threading.Thread(target=ThreadFunc例項)
從Thread派生出一個子類,建立子類的例項class MyThread(threading.Thread)重寫threading.Thread中的run函式供執行緒執行。
所有上述執行緒建立後,都採用執行緒例項的start()的方法啟動,join()方法加自旋鎖。
關於自旋鎖,多個執行緒執行時,怎樣確保所有重要執行緒都已經結束呢?在threading模組中,每個Thread類都有一個join函式,其實就是一個等待此執行緒鎖釋放的無限迴圈(也稱為自旋鎖)。當一個執行緒例項啟動時,顯式呼叫join()會使主執行緒被迫等待該執行緒的自旋鎖釋放。這種情況在順序過程的任務流程式中比較常見。
學到這裡,我想,不妨做一個通用的模組,對任意過程實現執行緒同步處理。比如一個下載過程,只需要傳入URL就可以了,主執行緒不必等待下載完成才執行其他任務,對於這樣一個特殊的過程函式,我們可以使用函式修飾功能。
class wraps:
#=======================================
# only for process without result,
# and main do not wait for it finished
#=======================================
@staticmethod
def thread(f):
def wrappFunc(*args,**kargs):
try:
_thread=BaseThread(f,args,f.__name__)
_thread.start()
except Exception,e:
print e
return wrappFunc
其中BaseThread繼承了threading.Thread類,負責執行緒物件的建立工作。
class BaseThread(Thread):
def __init__(self,func,args,name=“):
threading.Thread.__init__(self)
self.name=name
self.args=args
self.func=func
self.res=None
def getResult(self):
return self.res
def run(self):
print `starting`,self.name,`at:`,ctime()
self.res=self.func(*self.args)
print `finished`,self.name,`at:`,ctime()
把這些類放在一個單獨的模組中basethread中,看看如何在我們平常的程式中呼叫:
From basethread import wraps
@wraps.thread
def test(sec):
for i in range(sec):
sleep(1)
test(4)
test(3)
test(1)
test(2)
用threading模組建立執行緒,主要是對Thread類的例項化,根據建立例項的不同方法,主要使用下面三種:
建立一個Thread 的例項,構造方法中傳入一個函式t=threading.Thread(target=_func_name,args=(引數元組)
建立一個Thread 的例項,構造方法中傳入一個可呼叫的類物件定義一個類class ThreadFunc,類中必須重寫__call__函式供執行緒呼叫t=threading.Thread(target=ThreadFunc例項)
從Thread派生出一個子類,建立子類的例項class MyThread(threading.Thread)重寫threading.Thread中的run函式供執行緒執行。
所有上述執行緒建立後,都採用執行緒例項的start()的方法啟動,join()方法加自旋鎖。
關於自旋鎖,多個執行緒執行時,怎樣確保所有重要執行緒都已經結束呢?在threading模組中,每個Thread類都有一個join函式,其實就是一個等待此執行緒鎖釋放的無限迴圈(也稱為自旋鎖)。當一個執行緒例項啟動時,顯式呼叫join()會使主執行緒被迫等待該執行緒的自旋鎖釋放。這種情況在順序過程的任務流程式中比較常見。
學到這裡,我想,不妨做一個通用的模組,對任意過程實現執行緒同步處理。比如一個下載過程,只需要傳入URL就可以了,主執行緒不必等待下載完成才執行其他任務,對於這樣一個特殊的過程函式,我們可以使用函式修飾功能。
class wraps:
#=======================================
# only for process without result,
# and main do not wait for it finished
#=======================================
@staticmethod
def thread(f):
def wrappFunc(*args,**kargs):
try:
_thread=BaseThread(f,args,f.__name__)
_thread.start()
except Exception,e:
print e
return wrappFunc
其中BaseThread繼承了threading.Thread類,負責執行緒物件的建立工作。
class BaseThread(Thread):
def __init__(self,func,args,name=“):
threading.Thread.__init__(self)
self.name=name
self.args=args
self.func=func
self.res=None
def getResult(self):
return self.res
def run(self):
print `starting`,self.name,`at:`,ctime()
self.res=self.func(*self.args)
print `finished`,self.name,`at:`,ctime()
把這些類放在一個單獨的模組中basethread中,看看如何在我們平常的程式中呼叫:
From basethread import wraps
@wraps.thread
def test(sec):
for i in range(sec):
sleep(1)
test(4)
test(3)
test(1)
test(2)
結果沒上傳上來 ,大意就是都是同時開始,按1,2,3,4秒結束,共耗時4秒。
還有一個更強大的模組Mutiprocessing —– process – base threading interface,以後再討論。
還有一個更強大的模組Mutiprocessing —– process – base threading interface,以後再討論。
相關文章
- Python模組學習:thread 多執行緒處理Pythonthread執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 多工處理方式之二:多執行緒執行緒
- 前端多執行緒處理——async/await前端執行緒AI
- Spring多執行緒事務處理Spring執行緒
- 每日三道面試題,通往自由的道路8——多執行緒面試題執行緒
- 多執行緒(三)執行緒
- 3種方式實現python多執行緒併發處理Python執行緒
- threading 多執行緒控制和處理thread執行緒
- 多執行緒理論執行緒
- IO處理執行緒執行緒
- 初學者看過來:Python中多執行緒和多處理的指南Python執行緒
- Python模組學習:threading 多執行緒控制和處理Pythonthread執行緒
- 【進階之路】多執行緒條件下分段處理List集合的幾種方法執行緒
- python多執行緒Python執行緒
- Python 多執行緒Python執行緒
- 多執行緒系列(三):執行緒池基礎執行緒
- C#中的執行緒(三)多執行緒C#執行緒
- java中多執行緒併發的處理方式Java執行緒
- Java 多執行緒處理任務的封裝Java執行緒封裝
- Python 多執行緒多程式Python執行緒
- Java多執行緒並行處理任務的實現Java執行緒並行
- Java多執行緒(三):SynchronizedJava執行緒synchronized
- 多執行緒筆記 三執行緒筆記
- python多執行緒示例Python執行緒
- python多執行緒中:如何關閉執行緒?Python執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- java 基礎之圖片的多執行緒處理和大檔案的多執行緒拷貝Java執行緒
- 【Python】 多程式與多執行緒Python執行緒
- python多執行緒程式設計1— python對多執行緒的支援Python執行緒程式設計
- java多執行緒:執行緒體往外丟擲異常的處理機制實踐Java執行緒
- 如何處理執行緒死鎖執行緒
- mysql 5.7 執行緒阻塞處理MySql執行緒
- 實戰.Net多執行緒(三)執行緒
- 多執行緒和多執行緒同步執行緒
- JAVA多執行緒下高併發的處理經驗Java執行緒
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP