⚡️ Как узнать количество CPU в Python одной строкой
Для этого не нужны сторонние библиотеки — всё есть в стандартном
Например:
Но есть важный нюанс: функция обычно возвращает количество логических процессоров, доступных системе, а не обязательно число физических ядер.
То же самое можно получить через:
Это особенно полезно, когда нужно автоматически подобрать количество worker-процессов:
Но запускать
Маленькая функция, но часто полезна при настройке
#Python #Programming #Multiprocessing #Backend
Для этого не нужны сторонние библиотеки — всё есть в стандартном
multiprocessing:
import multiprocessing
print(multiprocessing.cpu_count())
Например:
8
Но есть важный нюанс: функция обычно возвращает количество логических процессоров, доступных системе, а не обязательно число физических ядер.
То же самое можно получить через:
import os
print(os.cpu_count())
Это особенно полезно, когда нужно автоматически подобрать количество worker-процессов:
workers = multiprocessing.cpu_count()
Но запускать
N workers только потому, что у CPU есть N потоков, не всегда оптимально. Для CPU-bound задач количество процессов обычно подбирают экспериментально, а для I/O-bound архитектура может быть совсем другой.Маленькая функция, но часто полезна при настройке
multiprocessing, worker pools и параллельных вычислений.#Python #Programming #Multiprocessing #Backend
❤1👍1
Media is too big
VIEW IN TELEGRAM
Главный секрет bool: он на самом деле int
Складываю True и True, получаю 2
Складываешь два True в Python и получаешь 2. Не баг и не магия: bool наследуется от int, поэтому True это единица, а False это ноль. Минута, и ты больше никогда не удивишься sum по списку булевых значений.
#python
Складываю True и True, получаю 2
Складываешь два True в Python и получаешь 2. Не баг и не магия: bool наследуется от int, поэтому True это единица, а False это ноль. Минута, и ты больше никогда не удивишься sum по списку булевых значений.
#python
❤3👍3🔥3
Forwarded from Just Xor
🐍 Генераторные выражения в Python - один из самых простых способов экономить память.
Обычный list comprehension сразу создаёт весь список:
А generator expression вычисляет значения только по мере необходимости:
То есть миллион элементов не хранится в памяти одновременно.
Можно получать значения по одному:
или передать генератор напрямую в:
Главный плюс - lazy evaluation.
Особенно полезно для:
- больших файлов;
- потоков данных;
- длинных последовательностей;
- ETL-пайплайнов;
- обработки данных, которые не нужно хранить целиком.
Но есть нюанс: генератор одноразовый.
После того как значения закончились, пройти по нему повторно уже нельзя.
Маленький синтаксический приём, который может заметно уменьшить потребление памяти.
#Python #Programming #Backend #DataEngineering
Обычный list comprehension сразу создаёт весь список:
squares = [x ** 2 for x in range(1_000_000)]
А generator expression вычисляет значения только по мере необходимости:
squares = (x ** 2 for x in range(1_000_000))
То есть миллион элементов не хранится в памяти одновременно.
Можно получать значения по одному:
next(squares)
или передать генератор напрямую в:
sum(...)
max(...)
any(...)
all(...)
Главный плюс - lazy evaluation.
Особенно полезно для:
- больших файлов;
- потоков данных;
- длинных последовательностей;
- ETL-пайплайнов;
- обработки данных, которые не нужно хранить целиком.
Но есть нюанс: генератор одноразовый.
После того как значения закончились, пройти по нему повторно уже нельзя.
Маленький синтаксический приём, который может заметно уменьшить потребление памяти.
#Python #Programming #Backend #DataEngineering
👍5❤3