Situação: Webservice feito em Flask (Python), onde alguns dos métodos disparam rotinas que são executadas em processos separados (Multiprocessing). Enquanto o ambiente está sendo executado via script, está tudo bem. Tudo funciona.
Todavia, quando utilizando o pyinstaller para gerar um executável do webservice, no momento em que a rotina multiprocessing é chamada, o webservice reinicia e passa a não responder.
Isso acontece devido a forma como o multiprocessing é tratado nos ambientes Windows. Todavia, a solução é simples.
Solução: Para resolver este problema, basta incluir o comando:
multiprocessing.freeze_support()
Ele deve ser inserido logo após o statement if __name__ == “__main__”:.
Exemplo do código com problema:
# -*- coding: utf-8 -*- from flask import Flask from webservice_api_v1 import api_v1 app = Flask(__name__) app.register_blueprint(api_v1) if __name__ == '__main__': app.run(port=6000)
No fonte acima, o blueprint utilizado possui uma rota que contém a rotina multi-processo.
# -*- coding: utf-8 -*- from flask import Flask from multiprocessing import freeze_support from webservice_api_v1 import api_v1 app = Flask(__name__) app.register_blueprint(api_v1) if __name__ == '__main__': freeze_support() app.run(port=6000)
No fonte acima, o problema foi resolvido importando a função freeze_support do pacote multiprocessing.
É isso.
Espero ter ajudado.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022