Ядро умирает при использовании многопоточности - PullRequest
0 голосов
/ 23 мая 2018

Я использую блокнот jupyter для подсчета вхождения значения в несколько CSV-файлов.У меня есть около 60 CSV-файлов, каждый размером около 1 ГБ.Чтобы эффективно проходить через них, я использую многопоточность.Однако ядро ​​продолжает умирать всякий раз, когда я выполняю следующий код:

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

В чем может быть причина этого?Есть ли способ это исправить?

1 Ответ

0 голосов
/ 28 мая 2018

В вашем коде есть две проблемы.

  1. Для Python вы фактически используете многопоточность вместо многопроцессорной обработки с помощью пула в multiprocessing.dummy.Если вы хотите использовать многопроцессорную обработку, перейдите к следующему:

    from multiprocessing import Pool
    

    Но, как вы упомянули, есть данные ~ 60G. Боюсь, ваш локальный компьютер не справится с этим?

  2. Я полагаю, вам нужен мощный кластер для этой задачи (больше никаких панд).поэтому вам может понадобиться что-то вроде Spark.

    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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...