写给自己用的一个低配版的称不上框架的多线程框架

最近在写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
# print("文件内容放入队列完成")


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() # fileDataLine变量为文件的每一行内容,可直接用
# ================= #
# 自定义功能从下方开始
# ================= #
# ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
print(fileDataLine) # 测试代码:将文件中每一行的信息延时1s输出
time.sleep(1)


if __name__ == '__main__':
# 以下为相关配置信息
# =========================================================
multi = 7 # 线程数量
queueSize = 10 # 申请队列空间大小,值一般略大于multi的值
filePath = "testfile.txt" # 文件路径,和脚本同一目录下可直接用文件名
waitTime = 1 # 文件线程准备时间(s),默认1s,若需要读取的文件大小大于10M可增加至5s以上,文件越大设置的时间理论上越长
# =========================================================

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代码下载位置点我