创建ThreadFunc类和创建Thread对象,来实现多线程。
创建新线程的时候,Thread对象会调用我们的TreadFunc对象,这是会用到一个特殊的函数__call__()
。由于有一个参数的元组,这时要在代码中使用apply()函数。
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 08 15:04:14 2015
@author: wt
"""
import threading
from time import sleep,ctime
loops = [4, 2]
class ThreadFunc(object):
def __init__(self, func, args,name=''):
self.name = name
self.func = func
self.args = args
def __call__(self):
apply(self.func, self.args)
def loop(nloop, nsec):
print 'start loop',nloop,'at:', ctime()
sleep(nsec)
print 'loop', nloop, 'done at:', ctime()
def main():
print 'starting at:',ctime()
threads = []
nloops = range(len(loops))
for i in nloops:
t = threading.thread(target=threadFunc(loop,(i,loop[i]),
loop.__name__))
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print 'all DONE at:',ctime()
if __name__ == '__main__':
main()
运行结果:
starting at: Tue Sep 08 15:30:54 2015
start loop 0 at: Tue Sep 08 15:30:54 2015
start loop 1 at: Tue Sep 08 15:30:54 2015
loop 1 done at: Tue Sep 08 15:30:56 2015
loop 0 done at: Tue Sep 08 15:30:58 2015
all DONE at: Tue Sep 08 15:30:58 2015