Если я правильно понял ваш случай, вы можете сделать что-то подобное, используя пул работников charm4py (см. https://charm4py.readthedocs.io/en/latest/pool.html для получения дополнительной информации).Например:
from charm4py import charm
def applyParallel(dfGrouped, func):
retLst = charm.pool.map(func, [group for name, group in dfGrouped], ncores=2)
return pd.concat(retLst)
# This is the function to do group by parallel processing
def new(x):
tsc_out = applyParallel(x.groupby(gbcols), custom_func)
def f1(args):
charm.pool.map(new, [i for i in range(4)], ncores=4, allow_nested=True)
exit()
charm.start(f1)
Используя пул работников, вы можете запускать задачи (которые, я думаю, совпадают с тем, что вы называете кластерами), определяя, сколько ядер вы хотите запустить для данного набора задач.Хотя я думаю, что в вашем случае вы могли бы просто оставить ncores=-1
и позволить charm4py планировать задачи, используя доступные ядра.
Это также будет работать, если у вас есть задачи, запускающие другие задачи (если вы используете allow_nested=True
).
Следует отметить, что при запуске программы с помощью charm4py вы указываете, сколько процессов нужно запускать (вы даже можете запускать процессы на нескольких хостах, и приложение может использовать их все одновременно).Так, например, если у вас 8 ядер и вы хотите использовать все из них, запустите программу с 8 процессами.