А запуск просто 20 раз даст то, что вам нужно? Не требуется никакая коммуникация между процессами?
Тогда однозначно запускайте просто 20 копий программы, можно через parallel (стандартная утилита, есть наверное, везде) или просто своим шелл-скриптом. Будет быстрее и надежнее.
В пайтоне есть GIL и это сильно влияет на производительность в многопоточном режиме. Да и вообще, зачем усложнять? Один изолированный процесс, который делает какую-то простую функцию - это богоугодно. А если вы делаете монстра, который внутри себя запускает потоки/процессы то только в идеале вы приблизитесь к рекомендуемому варианту. А не в идеале - будете иметь проблемы с производительностью или какие-то сложноуловимые глюки и race conditions.
Многопоточность оправдана только если без нее никак, например, нужна коммуникация между процессами, работа с общими данными.
С другой стороны, если производительность вам не важна, а хочется "набить руку", потренироваться - в пайтоне это достаточно просто делается, почему бы и нет? Но это не самый оптимальный результат по скорости будет.