1. 程式人生 > >Python中執行緒的建立方法:派生Thread子類

Python中執行緒的建立方法:派生Thread子類

在看這個之前,我應該假設你對類已經很熟悉了。
什麼是超類,子類?怎麼派生子類?子類的繼承,子類對於超類方法的新增或是過載。這些如果很熟悉,就能看懂了,如果不是很熟悉,你可以去看看《Python學習手冊》,它的第六部分關於類介紹的很仔細,閱讀即可。

那麼接下來就來講這種建立執行緒的方式——派生Thread子類,並建立子類的例項

#-*- coding: UTF-8 -*-
import threading
import time

def loop(num):
    print('the start time is %s'%time.ctime())
    time.sleep(num)
    print('the end time is %s'
%time.ctime()) class Mythread(threading.Thread): def __init__(self,func,args,name): threading.Thread.__init__(self) self.func=func self.args=args self.name=name def run(self): #這裡是將threading.Thread中的run方法進行了過載 self.func(self.args) def main()
:
t=Mythread(loop,4,loop.__name__) f=Mythread(loop,5,loop.__name__) t.start() #解釋:這裡的start可以說是呼叫run的方法 f.start() t.join() f.join() if __name__=='__main__': main()

接下來用假如一點東西來驗證我上面的兩個解釋

接下來我們來驗證(start)方法是呼叫run方法這一說法
我們假設threading.Thread中的start方法的定義方式為

def start
(self):
self.run()

我們會在接下來的程式碼中將start方法進行擴充套件

```
#-*- coding: UTF-8 -*-
import threading
import time

def loop(num):
    print('the start time is %s'%time.ctime())
    time.sleep(num)
    print('the end time is %s'%time.ctime())

class Mythread(threading.Thread):
    def __init__(self,func,args,name):
        threading.Thread.__init__(self)
        self.func=func
        self.args=args
        self.name=name

    def run(self):
        #這裡是將threading.Thread中的run方法進行了過載
        self.func(self.args)

    def printff(self):
        print(self.args)

    def start(self):
        #為了更好的理解,你可以先將**threading.Thread.start(self)**這一句刪除進行測試
        threading.Thread.start(self)
        self.printff()

def main():
    t=Mythread(loop,4,loop.__name__)
    f=Mythread(loop,5,loop.__name__)

    t.start()
    #解釋:這裡的start可以說是呼叫run的方法
    f.start()

    t.join()
    f.join()

if __name__=='__main__':
    main()

你可以將以上兩段程式碼複製貼上到你的IDLE中,看看執行效果,我相信你會恍然大悟的