Почему однопоточное выполнение тяжелого выражения Polars выполняется быстрее, чем многопоточное?Python

Программы на Python
Anonymous
 Почему однопоточное выполнение тяжелого выражения Polars выполняется быстрее, чем многопоточное?

Сообщение Anonymous »

Удивительно, но Polars >= 0.17.13 работает лучше, если ему разрешено использовать только один поток. Для некоторых более ранних версий Polars разницы нет.
# polars>=0.17.3

import polars as pl
import time
import os

def compute(initial_value: pl.Expr) -> pl.Expr:
"""Waste some CPU power to compute the golden ratio"""
result = initial_value
for i in range(100):
result = (1 + result) ** 0.5
return result

# Block parallel execution of polars expressions
os.environ["POLARS_MAX_THREADS"] = "1" # the more - the slower

# Create a dataframe
df = pl.DataFrame(pl.repeat(0.0, 10_000_000, eager=True).alias("value"))

# Compute
start_time = time.perf_counter()
df_b = (
df.lazy().with_columns(compute(pl.col("value")).alias("result")).collect()
)
delta_time = time.perf_counter() - start_time
print(f"Thread pool size: {pl.threadpool_size()}. Time: {delta_time:.3f} s.")


Ниже приведены результаты с os.environ["POLARS_MAX_THREADS"] = "1" и без него.
Thread pool size: 1. Time: 2.102 s.
Thread pool size: 16. Time: 3.634 s.



Подробнее здесь: https://stackoverflow.com/questions/765 ... faster-tha

Вернуться в «Python»