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

最近在写python的一些代码的时候经常遇到需要读取文件里面的网址或ip信息,然后对网址或者ip信息进行测试,一开始是用的一个主线程进行写,但是发现当遇到一些响应比较慢的网站的时候会变得超级慢,然后就想到了多线程解决响应慢的问题。其实在第一次写的时候已经写过一次多线程了,不过把代码给写死了,往这个任务上迁移的时候不是很好迁移,于是决定写一个适用于该场景的多线程框架(哈哈,其实称不上框架,可以说成模板,不过还是说成框架好听些,嘻嘻)

好了,扯淡到此结束。下面正式开始说明。

还是先贴上代码:


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

说点什么
头像
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...