Fala, galera!

Tudo bem com vocês?

Estava pensando em uma forma em que eu pudesse escrever mais postagens, então decidi criar uma categoria de postagens mais enxutas e práticas. 

Creio que dessa maneira, poderei contribuir com mais material.

Essa será a primeira postagem da categoria drops, e nela iremos criar um script Python como um serviço, fazendo nosso script rodar em background.

Pre-requisitos

Para criar um script Python como um serviço, utilizaremos a biblioteca “service”, então, basta dar um “pip install service” no console.

Você pode localizar a documentação no link abaixo:

https://python-service.readthedocs.io/en/stable/

Codificação

Para o código, criei uma função simples que herda de service.

Dentro dela, criei a função “processar”, para ser acessada via linha de comando.

Veja como ficou:

import logging
import time
from service import Service

logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s')

class PyAAS(Service):
    def __init__(self, *args, **kwargs):
        super(PyAAS, self).__init__(*args, **kwargs)

    def run(self):
        while not self.got_sigterm():
            logging.debug(f"Serviço ativo PID: {self.get_pid()}")
            time.sleep(5)

    def processar(self):
        logging.info('Iniciando processamento...')
        for i in range(10):
            print(f'Processando {i}')
        logging.info('Processamento concluido!!!')

Devemos sobrescrever a classe “run”, ela é a classe principal, responsável por executar nosso script em background.

Utilização

Para realizar o controle, eu criei a implementação abaixo:

import logging
import time
from service import Service

logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s')

class PyAAS(Service):
    def __init__(self, *args, **kwargs):
        super(PyAAS, self).__init__(*args, **kwargs)

    def run(self):
        while not self.got_sigterm():
            logging.debug(f"Serviço ativo PID: {self.get_pid()}")
            time.sleep(5)

    def processar(self):
        logging.info('Iniciando processamento...')
        for i in range(10):
            print(f'Processando {i}')
        logging.info('Processamento concluido!!!')


if __name__ == '__main__':
    import sys

    if len(sys.argv) != 2:
        logging.error(f"Erro de sintaxe: {sys.argv[1]} ")
        sys.exit()

    cmd = sys.argv[1].lower()
    service = PyAAS('python-as-a-service', pid_dir='/tmp')

    if cmd == 'start':
        service.start()
        logging.info('Iniciando o serviço...')

    elif cmd == 'stop':
        service.stop()

    elif cmd == 'processar':
        service.processar()

    elif cmd == 'status':
        if service.is_running():
            logging.info("O serviço está rodando.")
        else:
            logging.info("O serviço não está rodando")
    else:
        logging.error(f'Não foi possivel localizar o comando: {cmd}')
        sys.exit()

Com isso, iremos passar argumentos para nosso script, e ele irá executar as instruções.

Nosso primeiro comando é o “start” para iniciarmos o processo:

Podemos confirmar que o processo está rodando com o comando “status”:

Agora, podemos pedir o processamento, com o comando “processar”.

Feito o processamento, podemos parar nosso processo, com o comando “stop” e confirmar se o serviço está rodando com o comando “status”.

Conclusão

Essa é uma maneira bem simples de utilizar um script Python como um serviço rodando em background.

Espero que essa postagem ajude com esse ponto!

Um abraço!

🙂

Categorias: DropsPython

Jefferson Soares

Olá! Sou Jefferson. Trabalho com: Dados, Dashboards, SQL, SAS, Python e muito mais! Criei esse cantinho para postar alguns conhecimentos. :)

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments