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

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)