有的时候,我们需要快速的读取python的列表,如果是单线程就有点慢,最好就是开启多线程。但是如果线程数开多了,读取速度不仅没有加快,反而变慢了。所以我们需要控制线程数。还需要根据列表的大小,平均分配每个线程需要执行的列表区间。
根据要求,均益写好了这段代码,大家可自行设置行程数totalThread,和需要执行的列表listImg,至于读取这个列表的需求目的可以设置这个方法printImg。详细的代码看下面
# -*- coding: UTF-8 -*- import threading from time import sleep,ctime class myThread (threading.Thread): def __init__(self, threadID, name, s , e): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.s = s self.e = e def run(self): print "Starting " + self.name+ctime() # 获得锁,成功获得锁定后返回True # 可选的timeout参数不填时将一直阻塞直到获得锁定 # 否则超时后将返回False threadLock.acquire() #线程需要执行的方法 printImg(self.s,self.e) # 释放锁 threadLock.release() listImg = [] #创建需要读取的列表,可以自行创建自己的列表 for i in range(179): listImg.append(i) # 按照分配的区间,读取列表内容,需要其他功能在这个方法里设置 def printImg(s,e): for i in range(s,e): print i totalThread = 3 #需要创建的线程数,可以控制线程的数量 lenList = len(listImg) #列表的总长度 gap = lenList / totalThread #列表分配到每个线程的执行数 threadLock = threading.Lock() #锁 threads = [] #创建线程列表 # 创建新线程和添加线程到列表 for i in range(totalThread): thread = 'thread%s' % i if i == 0: thread = myThread(0, "Thread-%s" % i, 0,gap) elif totalThread==i+1: thread = myThread(i, "Thread-%s" % i, i*gap,lenList) else: thread = myThread(i, "Thread-%s" % i, i*gap,(i+1)*gap) threads.append(thread) # 添加线程到列表 # 循环开启线程 for i in range(totalThread): threads[i].start() # 等待所有线程完成 for t in threads: t.join() print "Exiting Main Thread"