假设我有一个类,想从磁盘并行读取几个文件,并参数化类参数。最正确的方法是什么(以及如何做)?在
我考虑过线程,因为它只是I/O操作。在
非并行实现示例(1线程):
import pandas as pd
class DataManager(object):
def __init__(self):
self.a = None
self.b = None
self.c = None
self.d = None
self.e = None
self.f = None
def load_data(self):
self.a = pd.read_csv('a.csv')
self.b = pd.read_csv('b.csv')
self.c = pd.read_csv('c.csv')
self.d = pd.read_csv('d.csv')
self.e = pd.read_csv('e.csv')
self.f = pd.read_csv('f.csv')
if __name__ == '__main__':
dm = DataManager()
dm.load_data()
# Main thread is waiting for load_data to finish.
print("finished loading data")
在大多数情况下,I/O操作不受CPU的限制,因此使用多个进程是一种过度消耗。使用多个线程是很好的,但是
pb.read_csv
不仅读取文件,而且解析它,因为它可以是CPU限制的。我建议您在一开始使用asyncio从磁盘读取文件。下面是这样做的代码:函数
read_files_async
返回文件内容列表(字节缓冲区),您可以将其传递给pd.read_csv
。在我认为只对文件读取进行优化就足够了,但是你可以用多个进程并行解析文件内容(线程和异步不会提高解析过程的性能):
^{pr2}$您应该根据您的机器规格设置
NUMBER_OF_CORES
用Python3ThreadPoolExecutor可能的解决方案
相关问题 更多 >
编程相关推荐