Хотя этот ответ в порядке, я бы рекомендовал ответ skovorodkin ниже:
>>> def partition(number):
... answer = set()
... answer.add((number, ))
... for x in range(1, number):
... for y in partition(number - x):
... answer.add(tuple(sorted((x, ) + y)))
... return answer
...
>>> partition(4)
set([(1, 3), (2, 2), (1, 1, 2), (1, 1, 1, 1), (4,)])
Если вы хотите, чтобы все перестановки (т.е. (1, 3) и (3, 1)) меняли answer.add(tuple(sorted((x, ) + y))
к answer.add((x, ) + y)
Хотя не точно ответ на Ваш вопрос, некоторые среды сборки как муравей также поддерживают распараллеливание сборок, поэтому если Ваш граф зависимостей разрешает, чтобы у Вас могло быть несколько javac's, работающие одновременно.