2016-09-15 3 views
1

Я пишу код, используя Pandas 0.18/Python 3.5 на Intel i3 (четыре ядра).Pandas, Concurrent.Futures и GIL

Я прочитал это: https://www.continuum.io/content/pandas-releasing-gil

У меня также есть некоторые работы, что является IO связан (разбор CSV файлов в dataframes). Мне нужно сделать много вычислений, которые в основном перемножают dataframes.

Мой код в настоящее время параллелен с использованием concurrent.futures ThreadPoolExecutor.

Мой вопрос:

  • В общем, я должен использовать потоки для выполнения заданий панд параллельно, или же панды эффективного использования всех ядер без меня, явно сказать это? (в этом случае я буду выполнять свои задания поочередно).

ответ

1

Лучшее, что я могу сказать, читая документы, панды simply releases the GIL for certain operations:

Мы выпускаем глобальный-интерпретатор-блокиратор (GIL) на некоторых Cython операций. Это позволит запускать другие потоки одновременно во время вычисления , что потенциально позволяет повысить производительность от многопоточности. В частности, от этого выигрывают groupby, nsmallest, value_counts и некоторые 10.

Все это означает, что другие потоки могут выполняться интерпретатором Python, в то время как вычисления, выполняемые pandas, продолжаются. Это не означает, что панды автоматически масштабируют вычисления по многим потокам. Они сортируют упомянуть это в документации, а также:

Освобождение от GIL может принести пользу приложения, которое использует тему для взаимодействия с пользователем (например, QT), или выполнения многопоточных вычислений.

Чтобы получить преимущества параллелизации, необходимо фактически создавать и выполнять несколько потоков в своем собственном коде. Таким образом, вы должны продолжить использование ThreadPoolExecutor, если вы пытаетесь выполнить параллельное выполнение в своем приложении.

Имейте в виду, что pandas только освобождает GIL для операций, поэтому вы не можете получать улучшения производительности несколькими потоками, если не используете какие-либо методы, которые фактически освобождают его.

Смежные вопросы