分享知識 傳遞快樂
Python 中線程常用的有二種方式:實例化 Thread、繼承實現
Python3 線程中常用的兩個模塊爲:
- _thread
- threading
thread 模塊已被廢棄。用戶可以使用 threading 模塊代替。所以,在 Python3 中不能再使用"thread" 模塊。爲了兼容性,Python3 將 thread 重命名爲 "_thread"。
1、實例化 Thread
Thread 語法:
Thread(target=function, name=threadName, args)
參數說明:
- target=<function>:要執行的函數
- name:線程名稱
- args=():元組中只包含一個元素時,需要在元素後面添加逗號
代碼1:
from threading import current_thread, Thread
import time
def runFun(num):
print(num, "子線程 work", current_thread().name)
time.sleep(2)
if __name__ == '__main__':
my_thread = Thread(target=runFun, name="my_thread", args=(1,))
print(my_thread.name)
my_thread.start()
my_thread.join()
print("主線程結束")
2、繼承實現
開發中也是用的最多的,使用面向對象完成,利於功能的擴展。
代碼2:
from threading import Thread, current_thread
import time
from utils.PrintLine import pline
# 示例: 1 - 創建線程 - 繼承實現
class MyThread1(Thread):
def __init__(self, threadName, param1, param2):
# 這句話不能少
# name:指定線程名稱
Thread.__init__(self, name=threadName)
self.param1 = param1
self.param2 = param2
# 固定方法名,不能隨便起
def run(self):
print(self.name, ":", self.param1, "-", self.param2)
print("Run Child Thread, name:", current_thread().name)
time.sleep(2)
# 示例: 2 - 創建線程 - 繼承實現
class MyThread2(Thread):
def __init__(self, param1, param2):
# 這句話不能少
super(MyThread2, self).__init__() # 重構run函數必須要寫
self.param1 = param1
self.param2 = param2
def run(self):
print(self.name, ":", self.param1, "-", self.param2)
print("Run Child Thread, name:", current_thread().name)
time.sleep(2)
if __name__ == '__main__':
print('主線程開始')
pline(1, "創建線程 - 繼承實現")
t1 = MyThread1("t1", 1, 2)
print("t1.name:", t1.name)
t1.start()
t2 = MyThread1('t2', 3, 4)
print("t2.name:", t2.name)
t2.start()
t1.join()
t2.join()
pline()
pline(2, "創建線程 - 繼承實現")
t3 = MyThread2(5, 6)
print("t3.name:", t3.name)
t3.start()
t3.join()
t4 = MyThread2(7, 8)
print("t4.name:", t4.name)
t4.start()
t4.join()
pline()
print('主進程結束')
注意:如果使用繼承的方式實現多線程需要在 __init__() 方法中添加以下語句(任選其一即可):
Thread.__init__(self, name=threadName)
super(MyThread2, self).__init__()
——————————
如有不足請留言指正
相互學習,共同進步