Лучшее, что я могу сказать, читая документы, панды simply releases the GIL for certain operations:
Мы выпускаем глобальный-интерпретатор-блокиратор (GIL) на некоторых Cython операций. Это позволит запускать другие потоки одновременно во время вычисления , что потенциально позволяет повысить производительность от многопоточности. В частности, от этого выигрывают groupby
, nsmallest
, value_counts
и некоторые 10.
Все это означает, что другие потоки могут выполняться интерпретатором Python, в то время как вычисления, выполняемые pandas, продолжаются. Это не означает, что панды автоматически масштабируют вычисления по многим потокам. Они сортируют упомянуть это в документации, а также:
Освобождение от GIL может принести пользу приложения, которое использует тему для взаимодействия с пользователем (например, QT), или выполнения многопоточных вычислений.
Чтобы получить преимущества параллелизации, необходимо фактически создавать и выполнять несколько потоков в своем собственном коде. Таким образом, вы должны продолжить использование ThreadPoolExecutor
, если вы пытаетесь выполнить параллельное выполнение в своем приложении.
Имейте в виду, что pandas только освобождает GIL для операций, поэтому вы не можете получать улучшения производительности несколькими потоками, если не используете какие-либо методы, которые фактически освобождают его.