python的倆種建立執行緒的方式

2021-09-22 22:35:40 字數 1926 閱讀 9274

以前使用qt的時候,使用過qt中qthread建立過執行緒,主要分為倆種方式:一種為子類化qthread,並重新實現run()函式;還一種為定義工作物件繼承自 qobject,然後把這個工作物件move到qthread的乙個物件中。

然後現在看python時,發現python也有倆種建立執行緒的方式。python 主要通過兩種方式來建立執行緒:

使用 threading 模組的 thread 類的構造器建立執行緒。

繼承 threading 模組的 thread 類建立執行緒類。

呼叫 thread 類的構造器建立執行緒很簡單,直接呼叫 threading.thread 類的如下構造器建立執行緒:

__init__(self, group=none, target=none, name=none, args=(), kwargs=none, *,daemon=none)
這個函式構造器涉及如下幾個引數:

通過 thread 類的構造器建立井啟動多執行緒的步驟如下:

呼叫 thread 類的構造器建立執行緒物件。在建立執行緒物件時,target 引數指定的函式將作為執行緒執行體。

呼叫執行緒物件的 start() 方法啟動該執行緒。

示例**如下:

import threading

def func(max):

for i in range(max):

print(threading.current_thread().getname() + "" + str(i))

for i in range(100):

print(threading.current_thread().getname() + "" + str(i))

if i == 15:

t1 = threading.thread(target = func, args=(100,))

t1.start()

t2 = threading.thread(target = func, args=(100,))

t2.start()

t3 = threading.thread(target = func, args=(100,))

t3.start()

print('主線程執行完成!')

通過繼承 thread 類來建立並啟動執行緒的步驟如下:

定義 thread 類的子類,並重寫該類的 run() 方法。run() 方法的方法體就代表了執行緒需要完成的任務,因此把 run() 方法稱為執行緒執行體。

建立 thread 子類的例項,即建立執行緒物件。

呼叫執行緒物件的 start() 方法來啟動執行緒。

示例**如下:

import threading

class fkthread(threading.thread):

def __init__(self):

threading.thread.__init__(self)

self.i = 0

def run(self):

while( self.i < 100):

print(threading.current_thread().getname() + "" + str(self.i))

self.i += 1

for i in range(100):

print(threading.current_thread().getname() + "" + str(i))

if i == 15:

fk1 = fkthread()

fk1.start()

fk1 = fkthread()

fk1.start()

print('主線程執行完成!')

通常來說,推薦使用第一種方式來建立執行緒,因為這種方式不僅程式設計簡單,而且執行緒直接包裝 target 函式,具有更清晰的邏輯結構。

執行緒THread的倆種建立方式

執行緒建立有倆種方法,一種是擴充套件thread類,也就是繼承thread類,另一種的實現runnable介面.實際上,thread類也實現類runnable介面的.第一種,繼承thread介面 public class mythread extends thread 有main方法呼叫,main方...

執行緒的三種建立方

一,繼承thread 重寫run class programmer extends thread public static void main string args 二,繼承runnable 實現run class programmer implements runnable public st...

Java中實現多執行緒的倆種方式

方法一 繼承thread類,重寫run 方法 public class testrun catch interruptedexception e class thread extends thread catch interruptedexception e 開啟子執行緒,與主線程併發執行,設定不同...