Eu estaria disposto a apostar que o seu problema é python . Você não disse que tipo de processamento está sendo feito em cada arquivo, mas supondo que você esteja apenas processando os dados na memória, o tempo de execução será dominado pelo início de 30 milhões de máquinas virtuais python (intérpretes).
Se você puder reestruturar seu programa python para obter uma lista de arquivos, em vez de apenas um, obterá uma grande melhoria no desempenho. Você ainda pode usar xargs para melhorar ainda mais o desempenho. Por exemplo, 40 processos, cada um processando 1000 arquivos:
find ./data -name "*.json" -print0 |
xargs -0 -L1000 -P 40 python Convert.py
Isso não quer dizer que python seja uma linguagem ruim / lenta; simplesmente não é otimizado para o tempo de inicialização. Você verá isso com qualquer linguagem baseada em máquina virtual ou interpretada. Java, por exemplo, seria ainda pior. Se seu programa foi escrito em C, ainda haveria um custo de iniciar um processo separado do sistema operacional para manipular cada arquivo, mas seria muito menos.
De lá, você pode mexer com -P
para ver se consegue aumentar um pouco mais a velocidade, talvez aumentando o número de processos para aproveitar os processadores inativos enquanto os dados estão sendo lidos / gravados.