使用多线程将多个变量导出到目标文件夹
工作需求:在处理海量数据时(数据库、数据文件等),单线程操作往往速度非常慢,为提高效率,可以使用多线程来处理。
这里做个记录,将多个变量使用多线程导入到目标文件夹中。
直接上代码:
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线程开始导出数据