Execução de Método em segundo plano Pessoal, Boa tarde! Tenho um método que pode demorar mais que 1 hora para finalizar. Esse tempo é pela quantidade de linhas de código existentes multiplicado pelo número de registros e condições que o método deverá passar. O ponto aqui não é o tempo em demasia que talvez vocês podem achar que está levando, pois a execução do método para um único registro está dentro do norma...
HJ
Execução de Método em segundo plano  
Pessoal,

Boa tarde!

Tenho um método que pode demorar mais que 1 hora para finalizar. Esse tempo é pela quantidade de linhas de código existentes multiplicado pelo número de registros e condições que o método deverá passar. O ponto aqui não é o tempo em demasia que talvez vocês podem achar que está levando, pois a execução do método para um único registro está dentro do normal.

O ponto em questão aqui é que enquanto o método está em execução, obviamente todas as outras funcionalidades da aplicação estão presas, onde fica travada a tela, com aquela imagem de execução de método(bolinhas rolando), demonstrando que o processo está em andamento.

Como este método em específico é demorado, gostaria de verificar com vocês se vocês por ventura não sabem me dizer como posso e se isso é possível, de executar este método em back-ground/segundo plano, de forma que o script continue executando por "baixo dos panos" e a aplicação fique liberada para utilizar as demais funcionalidades.

Existe como?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (2)


MD

Olá, boa noite tudo bem?

Em que ambiente a sua aplicação roda?

Tenho uma aplicação que roda em Linux, vou te falar e tentar explicar a rotina que eu uso para executar tarefas similares.

Na contrab do LInux tenho diversas tarefas agendadas (execuções a cada min, a cada 15 mins, 8 da manhã, meio dia, 18 horas, dentre outras).

Cada tarefa da crontab chama um script bash, que por sua vez chama um script php (opto por chamar via bash para poder gerar logs adicionais).

Para evitar que um mesmo script seja executado duas vezes ou para ativar ou desativar a execução de determinadas rotinas, utilizo uma rotina de flags, por exemplo:

Script bash chama o arquivo php que executa uma integração cada 15 mins, no inicio dessa execução verifico se na tabela ZYZ (em meu caso tenho uma tabela chamada integracoes) o linha INTEGRACAO_RODANDO (integracao_produto_rodando por exemplo) esta como false, estando como false significa que não há integração rodando, ela inicia a rotina de integração logo após setar esse campo como true, roda todo o processo e antes de encerrar seta o campo como false novamente.

Durante esse tempo, caso a crontab chame o script novamente, ele ira verificar através da flag que a rotina esta rodando, e então a integração é ignorada para evitar dupla execução.

Através desse cenário, também é possível ativar ou desativar determinadas execuções através de flags, adicionando um simples teste (integracao_produto_ativa por exemplo).

Espero ter me feito entender, esse cenário é usado em Linux, mas facilmente pode ser adaptado a outro SO.

Abraço!
HJ

Marco,

Bom dia! Obrigado pelo retorno.
Minha aplicação roda em Windows, pois eu utilizo o Crystal Reports para geração de relatórios e a classe COM para Crystal só existe no Windows.

Existe como fazer isso para o Windows?
É possível também passar parâmetros para esse método, usando este processo que você explicou?

O método pode ser executado a qq momento pelo usuário do sistema. É uma inteligencia de cálculo que lê regras e o usuário pode escolher qual regra será executada, e é o método que lê n regras diferentes. Por isso a necessidade de executar o método a qualquer momento e a cada execução, informar parametros nele.

Pode me ajudar a entender como devo fazer isso no windows?

Obrigado