这里只是将target指向从一个函数对象变成了一个可调用的类实例。
重点推荐下第三种方式,用继承threading.Thread的方式来实现线程,有过Java多线程应用的朋友一定会对下面的例子非常熟悉。
from time import ctime,sleep
import threading;
from random import choice
class MyThread(threading.Thread):
def __init__(self,func,args,name):
super(MyThread,self).__init__();
self.func=func;
self.args=args;
self.name=name;
def run(self):
self.result=self.func(*self.args);
def getResult(self):
return self.result;
def loop(number,sec):
print "Thread ",number," begins and will sleep ",sec," at ",ctime();
sleep(sec);
print "Thread ",number,"ends at ",ctime();
def main():
seconds=[2,4];
threads=[];
array=range(len(seconds));
for i in array :
t=MyThread(loop,(i,choice(seconds)),loop.__name__);
threads.append(t);
print "main Thread begins at ",ctime();
for t in threads :
t.start();
for t in threads :
t.join();
print "main Thread ends at ",ctime();
if __name__=="__main__" :
main();
从上面可以看出MyThread继承了threading.Thread类,并在初始化方法中执行了必要的参数赋值。值得注意的是在Java类的继承中,如果不显示的指定调用父类的构造方法,那么默认将调用父类的无参构造方法。而在Python中,就不会主动去调用。所以这里需要显示的调用父类的初始化方法。
希望本文所述对大家的Python程序设计有所帮助。










