Переключение с многопроцессорного режима на многопоточный Dask.DataFrame - PullRequest
0 голосов
/ 06 июля 2018

У меня есть вопрос об использовании dask для распараллеливания моего кода. У меня есть пандас датафрейм и 8 ядер процессора. Поэтому я хочу применить некоторые функции по строкам. Вот пример:

import dask.dataframe as dd
from dask.multiprocessing import get
# o - is pandas DataFrame
o['dist_center_from'] = dd.from_pandas(o, npartitions=8).map_partitions(lambda df: df.apply(lambda x: vincenty((x.fromlatitude, x.fromlongitude), center).km, axis=1)).compute(get=get)

Этот код запускает 8 процессоров одновременно. Теперь у меня есть проблема, что каждый процесс ест много памяти, как основной процесс. Итак, я хочу запустить его многопоточным с общей памятью. Я пытался изменить from dask.multiprocessing import get на from dask.threaded import get. Но он не использует все мои процессоры, и я думаю, что он работает на одном ядре.

1 Ответ

0 голосов
/ 07 июля 2018

Да, это компромисс между потоками и процессами:

  • Потоки: хорошо распараллеливается только в том случае, если вы используете не-Python-код (большая часть Pandas API для числовых данных, кроме применения)
  • Процессы: требуется копирование данных между процессами
...