mv / fundamentus-api

Python/Pandas code to perform fundamental analysis on companies listed on BOVESPA from the website Fundamentus (www.fundamentus.com.br)
MIT License
90 stars 35 forks source link

Carregamento de lista de papéis lento #128

Open GustavoOS opened 1 year ago

GustavoOS commented 1 year ago

Ao fazer uma consulta a uma lista de papéis, são feitas múltiplas requisições de maneira sequencial, o que demora, dependendo da lista.

Sugestão: utilizar a API threadpoolexecutor para fazer as requisições em paralelo, otimizando o tempo de busca. Essa alternativa seria substitutiva ao atual processo que utiliza a iteração usando for.

GustavoOS commented 1 year ago

@mv sugestão de fix, é na detalhes.py:

from concurrent.futures import ThreadPoolExecutor

def get_detalhes_list(lst):
    """
    Get detailed data for a given list

    Input: list
    Output: DataFrame
    """

    with ThreadPoolExecutor() as executor:
        result = executor.map(get_papel, lst)
    result = pd.concat(result)

    # duplicate column (papel is the index already)
    try:
        result.drop('Papel', axis='columns', inplace=True)
    except: # pragma: no cover
        logging.error('drop column. Error=[{}].'.format(sys.exc_info()[1]))

    return result.sort_index()