昊天SEO

python 多线程读取列表(可以设置线程数,平均分配每个线程读取的列表数)

有的时候,我们需要快速的读取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"
网站的维护离不开大家的支持鼓励,捐赠让我更有动力走的更远&& 也可以关注我的微信公众号,发布更多的干货
本文网址:https://www.168seo.cn/python/2162.html

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址