Python 使用多线程时内核死亡

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

我使用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]
    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模块而不是熊猫。