使用多线程将多个变量导出到目标文件夹

使用多线程将多个变量导出到目标文件夹

工作需求:在处理海量数据时(数据库、数据文件等),单线程操作往往速度非常慢,为提高效率,可以使用多线程来处理。

这里做个记录,将多个变量使用多线程导入到目标文件夹中。

直接上代码:

import pandas as pd
import threading
import numpy as np

dfs = []
creatVar = locals()
listTemp = range(1, 10)
for i, s in enumerate(listTemp):
    creatVar["df" + str(i)] = pd.DataFrame(np.random.randn(100, 4), columns=list("ABCD"))
    dfs.append(creatVar["df" + str(i)])
    
def out(outfile, df):
    df.to_excel(outfile, index=False)
    
for i in range(len(dfs)):
    thread = threading.Thread(target=out, args=["D:\\python\\test\\df%s.xlsx" % str(i), dfs[i]])
    thread.start()

简单介绍一下工作原理:

  • creatVar = locals()locals() 函数会以字典类型返回当前位置的全部局部变量
  • creatVar["df" + str(i)] = pd.DataFrame(np.random.randn(100, 4), columns=list("ABCD"))这个操作,循环生成多个变量名有规律的变量,变量名是df0~df8,变量的值是随机生成的dataframe数据
  • dfs.append(creatVar["df" + str(i)])把pandas对象(或者说dataframe对象)放入列表,这个操作有点面向对象那么回事儿,这么操作的目的是为了下面更好的进行多线程操作,确实有点诡异,诡异之处在于这里根本无需进行多线程操作,不过我只是个示例而已
  • out(outfile, df)定义一个out函数,里面有两个参数,一个是需要导出的文件路径,一个是需要导出的数据
  • thread = threading.Thread(target=out, args=["D:\\python\\test\\df%s.xlsx" % str(i), dfs[i]])其实这就是多线程操作的核心了,循环创建线程,依次对dfs中的dataframe对象执行out函数操作,target和args分别是函数名和函数参数,然后start线程开始导出数据

你可能感兴趣的:(算法,QT开发及web开发等学习笔记,python,多线程)