[Resolvido] Webservice Flask parando com multiprocessing. (Python)

[Resolvido] Webservice Flask parando com multiprocessing. (Python)

Overview

Enfrentando problemas com seu webservice Flask que utiliza multiprocessing após compilar com pyinstaller? Não se preocupe! Este post traz uma solução simples e eficaz para manter seu serviço rodando suavemente. Acompanhe o guia abaixo para aprender a implementar a correção que precisa e siga desenvolvendo sem contratempos.

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:

1multiprocessing.freeze_support()

Ele deve ser inserido logo após o statement if __name__ == "__main__":.

Exemplo do código com problema:

 1# -*- coding: utf-8 -*-
 2
 3from flask import Flask
 4from webservice_api_v1 import api_v1
 5
 6
 7app = Flask(__name__)
 8app.register_blueprint(api_v1)
 9
10
11if __name__ == '__main__':
12    app.run(port=6000)

No fonte acima, o blueprint utilizado possui uma rota que contém a rotina multi-processo.

 1# -*- coding: utf-8 -*-
 2
 3from flask import Flask
 4<strong>from multiprocessing import freeze_support</strong>
 5from webservice_api_v1 import api_v1
 6
 7
 8app = Flask(__name__)
 9app.register_blueprint(api_v1)
10
11
12if __name__ == '__main__':
13<strong>    freeze_support()</strong>
14    app.run(port=6000)

No fonte acima, o problema foi resolvido importando a função freeze_support do pacote multiprocessing.

É isso.

Espero ter ajudado.