python筆記8-多線程threading之封裝式


前言

冬天到了,小伙伴們最喜歡和好朋友一起吃火鍋了,那么這種多個人同時吃火鍋的場景如何用python實現呢?

執行函數

1.先寫一個執行函數,用來實現做某件事情,不同的人吃火鍋用一個參數people代替。

# coding=utf-8
import threading
import time

def chiHuoGuo(people):
    print("%s 吃火鍋的小伙伴-羊肉:%s" % (time.ctime(),people))
    time.sleep(1)
    print("%s 吃火鍋的小伙伴-魚丸:%s" % (time.ctime(),people))

重寫threading.Thread

1.使用Threading模塊創建線程,直接從threading.Thread繼承,然后重寫__init__方法和run方法

# coding=utf-8
import threading
import time

class myThread (threading.Thread):   # 繼承父類threading.Thread
    def __init__(self, people, name):
        '''重寫threading.Thread初始化內容'''
        threading.Thread.__init__(self)
        self.threadName = name
        self.people = people

    def run(self):   # 把要執行的代碼寫到run函數里面 線程在創建后會直接運行run函數
        '''重寫run方法'''
        print("開始線程: " + self.threadName)

        chiHuoGuo(self.people)     # 執行任務
        print("qq交流群:226296743")
        print("結束線程: " + self.name)

start和run區別

1.start()方法 開始線程活動。

對每一個線程對象來說它只能被調用一次,它安排對象在一個另外的單獨線程中調用run()方法(而非當前所處線程)。

當該方法在同一個線程對象中被調用超過一次時,會引入RuntimeError(運行時錯誤)。

2.run()方法 代表了線程活動的方法。

你可以在子類中重寫此方法。標准run()方法調用了傳遞給對象的構造函數的可調對象作為目標參數,如果有這樣的參數的話,順序和關鍵字參數分別從args和kargs取得

參考代碼

# coding=utf-8
import threading
import time

def chiHuoGuo(people):
    print("%s 吃火鍋的小伙伴-羊肉:%s" % (time.ctime(),people))
    time.sleep(1)
    print("%s 吃火鍋的小伙伴-魚丸:%s" % (time.ctime(),people))


class myThread (threading.Thread):   # 繼承父類threading.Thread
    def __init__(self, people, name):
        '''重寫threading.Thread初始化內容'''
        threading.Thread.__init__(self)
        self.threadName = name
        self.people = people

    def run(self):   # 把要執行的代碼寫到run函數里面 線程在創建后會直接運行run函數
        '''重寫run方法'''
        print("開始線程: " + self.threadName)

        chiHuoGuo(self.people)     # 執行任務
        print("qq交流群:226296743")
        print("結束線程: " + self.name)


# 創建新線程
thread1 = myThread("xiaoming", "Thread-1")
thread2 = myThread("xiaowang", "Thread-2")


# 開啟線程
thread1.start()
thread2.start()

time.sleep(0.5)
print("退出主線程")

運行結果:

開始線程: Thread-1
Wed Jan 17 16:33:44 2018 吃火鍋的小伙伴-羊肉:xiaoming
開始線程: Thread-2
Wed Jan 17 16:33:44 2018 吃火鍋的小伙伴-羊肉:xiaowang
退出主線程
Wed Jan 17 16:33:45 2018 吃火鍋的小伙伴-魚丸:xiaomingWed Jan 17 16:33:45 2018 吃火鍋的小伙伴-魚丸:xiaowang

qq交流群:226296743qq交流群:226296743

結束線程: Thread-1結束線程: Thread-2

備注:這里運行結果會有個問題,主線程已經退出了,子線程Thread-1和Thread-2還在跑。這就是后面需要講的守護線程了。。。

python自動化交流 QQ群:779429633


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM