Python 使用多线程时内核死亡
我使用jupyter笔记本计算多个csv文件中出现的值。我有大约60个csv文件,每个大约1GB大。为了有效地循环它们,我使用多线程。但是,每当我执行以下代码时,内核就会一直死掉:Python 使用多线程时内核死亡,python,multithreading,jupyter-notebook,Python,Multithreading,Jupyter Notebook,我使用jupyter笔记本计算多个csv文件中出现的值。我有大约60个csv文件,每个大约1GB大。为了有效地循环它们,我使用多线程。但是,每当我执行以下代码时,内核就会一直死掉: from multiprocessing.dummy import Pool as ThreadPool files = glob.glob(path + '/*.csv') def func(f): df = pd.read_csv(f) df = df[df['key'] == 1] r
from multiprocessing.dummy import Pool as ThreadPool
files = glob.glob(path + '/*.csv')
def func(f):
df = pd.read_csv(f)
df = df[df['key'] == 1]
return df['key'].value_counts()
pool = ThreadPool(4)
results = pool.map(func, files)
pool.close()
pool.join()
results
这可能是什么原因?有没有办法解决这个问题?代码中有两个问题 对于Python,实际上是使用multiprocessing.dummy中的池来使用多线程而不是多处理。如果要使用多重处理,请更改为以下内容:
from multiprocessing import Pool
但正如你提到的,有大约60G的数据,恐怕你的本地计算机无法处理
我相信你需要一个强大的集群来完成这项任务。所以你可能需要考虑SARK之类的东西。
df = spark.read.csv(your_file_list, header=True)
df = df.filter(df.Key == 1)
df.head(5) # you can use df.collect() if the resultset if not too large
不确定你的内核,但当我试图跟踪你使用df时,我的大脑崩溃了。我认为它需要太多的内存,因为你要同时读取整个文件四次。对于简单的代码,您可能更喜欢使用普通的csv模块而不是熊猫。