python语法:多线程同时处理大量文件
先写在前面:
thread模块,简单来说,cpu的反复横跳而已:
要写并发机制,还得用多进程multiprocessing模块,想要快速实现的朋友可以看看我这篇文章:
当然threads也是有用的(轻量,简易,操作简单)
大家可以看我下面举例子
多线程是什么?
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
使用线程可以把占据长时间的程序中的任务放到后台去处理。
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
程序的运行速度可能加快。
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
我拿两个视频做简单的对比:
开多线程 https://www.zhihu.com/video/1109427449007489024 循环处理文件 https://www.zhihu.com/video/1109427570772303872
那学习多线程对数据分析有什么作用呢,我们可以看看:
现在我有0,1,2三个csv文件,如果我要获取数据并分析,例如用for循环,那只能按顺序读取,这样就会造成效率低下:
代码如下:
import operator
import csv
import os
def read_file(filpos,i):
with open(filpos+str(i)+".csv") as f:
reader=csv.reader(f)
for i in reader:
print(i)
for i in range(0,3):
read=read_file("D:/zhihu/",i)
当然你觉得没什么问题,但是如果有20个文件,每个文件有20000条数据,这种方法就会显得非常愚笨,所以我们可以采用多线程的方式同时间读取0,1,2csv文件。
第一步:import threading 模块
import threading
第二步:改下一下代码:
既可以同时打开并运行多个文件
import operator
import csv
import time
import threading
from time import ctime
def read_file(filpos,i):
with open(filpos+str(i)+".csv") as f:
reader=csv.reader(f)
for i in reader:
print(i)
threads = []
for t in range(0,3):
t= threading.Thread(target=read_file,args=("D:/zhihu/",x))
threads.append(t)