Параллельное вычисление нескольких пользовательских формул

Автор AntonSukhov, 17 июля 2024, 13:16

0 Пользователи и 1 гость просматривают эту тему.

AntonSukhov

Добрый день.
Написал на языке python пользовательскую формулу (например, название Formula1) и добавил её в качестве расширения LibreOfficeCalc.
На листе таких формул может быть очень много и с разными параметрами.
Вопрос: можно как то LibreOfficeCalc заставить выполнять данные формулы никак сейчас у меня последовательно, а параллельно?

mikekaganski

Нет. Calc умеет вычислять параллельно только в случаях, когда он знает, что результат вычисления одной формулы не зависит от другой, которая вычисляется параллельно. Для пользовательских функций анализ зависимостей невозможен.
С уважением,
Михаил Каганский

AntonSukhov

Т.е. как я понял, если в моем документе в ячейках A1, B1, C1 находятся formula1(1), formula1(10) и formula1(78) соответственно, то LibreOfficeCalc будет их выполнять всегда последовательно, для стандартных формул возможно параллельно?

mikekaganski

С уважением,
Михаил Каганский

mikekaganski

С уважением,
Михаил Каганский

economist

Полагаю, сабж связан с длительностью расчетов.

Есть интересный выход в переносе тяжелых вычислений в Python/Pandas/Numpy. Да, там тоже все считается на одном ядре, но вычисления векторизованные, они выполняются в ~4 раза быстрее. Технически их реализовать можно 2-мя способами:

1) getDataArray/setDataArray на Basic с вызовом скрипта на LO Python методом Basic invoke() - получится аналог "формулы массива"

2) полностью внешний Python-скрипт (м.б. даже во внешнем Python), который формирует отдельный файл (с заменой)Calc, на который ссылаются формулы из вашего ODS-файла.

Второй способ проще и безопаснее, но позволяет шагнуть дальше: нагрузить все ядра расчетом с другими либами: pandasparallel, dask итд. Можно использовать и bigdata-технологии (pyspark) с кластерами, авто-балансировкой и прочими вещами.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...