写给自己用的一个低配版的称不上框架的多线程框架
最近在写python的一些代码的时候经常遇到需要读取文件里面的网址或ip信息,然后对网址或者ip信息进行测试,一开始是用的一个主线程进行写,但是发现当遇到一些响应比较慢的网站的时候会变得超级慢,然后就想到了多线程解决响应慢的问题。其实在第一次写的时候已经写过一次多线程了,不过把代码给写死了,往这个任务上迁移的时候不是很好迁移,于是决定写一个适用于该场景的多线程框架(哈哈,其实称不上框架,可以说成模板,不过还是说成框架好听些,嘻嘻)
好了,扯淡到此结束。下面正式开始说明。
还是先贴上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| import queue import threading import time
def read_file(): with open(filePath,'r') as fp: file_data = fp.readlines() dataList = file_data dataLength = len(dataList) flag_xy = 0 while flag_xy != dataLength: while (not workQueue.full()) and (flag_xy != dataLength): workQueue.put(dataList[flag_xy]) flag_xy += 1 continue
def multi_start_tmain(): while not workQueue.empty(): file_line_api = workQueue.get() custom_def(file_line_api)
def custom_def(file_line_api): fileDataLine = file_line_api.strip() print(fileDataLine) time.sleep(1)
if __name__ == '__main__': multi = 7 queueSize = 10 filePath = "testfile.txt" waitTime = 1
threads = [] workQueue = queue.Queue(queueSize) fileThread = threading.Thread(target=read_file) fileThread.start() print("文件读取线程准备时间%ss" %waitTime) time.sleep(waitTime) for i in range(multi+1): thread = threading.Thread(target=multi_start_tmain) thread.start() threads.append(thread) for t in threads: t.join() fileThread.join() print("主线程结束,任务完成")
|
需要关注的信息介绍
自定义函数位置custom_def
你们的代码可以从红线下方开始书写,预留了fileDataLine变量,该变量保存文件每一行的信息,从文件第一行开始,可以直接拿来用。
print(fileDataLine)是测试用的代码,用于多线程输出文件的每一行信息。
time.sleep(1)是为了更明显区分多线程和单线程之间的速度差别而增加的延时。
复制过来的时候注意代码对齐方式哦~~,python的对齐是很严格的呢。
多线程配置区域信息介绍
multi = 7 # 线程数量,可根据情况自行设置线程数量多少
queueSize = 10 # 申请队列空间大小,值一般略大于multi的值
filePath = “testfile.txt” # 文件路径,和脚本同一目录下可直接用文件名
waitTime = 1 # 文件线程准备时间(s),默认1s,若需要读取的文件大小大于10M可增加至5s以上,文件越大设置
的时间理论上越长(为了完整的读取完文件,文件大,读>取的时间肯定长)
如果需求相似,其他无需做更多改动。
已托管到Github
Github代码下载位置点我