python语法:多线程同时处理大量文件

先写在前面:

thread模块,简单来说,cpu的反复横跳而已:

要写并发机制,还得用多进程multiprocessing模块,想要快速实现的朋友可以看看我这篇文章:

是枝裕和:内:python中的多进程​zhuanlan.zhihu.com图标

 

当然threads也是有用的(轻量,简易,操作简单)

大家可以看我下面举例子

 


 

多线程是什么?

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

使用线程可以把占据长时间的程序中的任务放到后台去处理。

用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。

程序的运行速度可能加快。

在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

我拿两个视频做简单的对比:

 

开多线程

 

循环处理文件


 

 

那学习多线程对数据分析有什么作用呢,我们可以看看:

现在我有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 = []
x=0
for t in range(0,3):
    t= threading.Thread(target=read_file,args=("D:/zhihu/",x))
    threads.append(t)
    x+=1
#join在里面时候只有第一个子进程结束才能打开第二个进程,if__name__ 调用时不可用
if __name__=="__main__":
    for thr in threads:
        thr.start()
    thr.join()
    print("all over %s"%ctime())

就是把文件添加到线程池里面,再一起执行。

下班了,这个代码对处理大量文件肯定有用,等会再更新吧..

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页