Provavelmente é a espera pela E / S que está prendendo você. O acesso à rede é mais lento do que acessar o armazenamento local, os SSDs são mais rápidos do que os HDDs e a RAM é mais rápida que o SSD.
Se o conjunto de dados for realmente grande e produzir um resultado grande - você pode querer ler de uma unidade e escrever para outra, para que haja menos pesquisas.
Outra coisa para procurar - é comutadores de contexto, por exemplo, seu programa pode ter logging excessivo e depois de cada operação ele tem que esperar para mudar para o sistema operacional para passar alguma string para o emulador de terminal, que renderiza uma string de texto que você não vai ler de qualquer maneira.