Publicado por Rafael Rosa em 12 de August de 2009

Backgrounded – Um encapsulador simples para rodar tarefas em segundo plano

backgroundedAssim como Ryan Sonnek, eu tentei várias opções para executar processos em segundo plano nos meus aplicativos Ruby, chegando até mesmo ao ponto de criar minha própria (imperfeita) solução. Como Ryan diz em seu blog, muitas das bibliotecas populares tem interfaces complicadas e parecem ter algo "errado".

Porém, devo discordar quando ele diz que todas as soluções para rodar processos Ruby em segundo plano sejam um lixo, e tenho certeza que ele não quer dizer isso mesmo. Apesar disso, sua proposta com o Backgrounded é interessante, simples e concisa, sendo, na prática, apenas um encapsulador simples para outras soluções.

Com o Backgrounded, se você quer que um certo método seja executado em segundo plano toda vez que for chamado, você pode especificar o seguinte:

class User
  backgrounded :do_stuff

  def do_stuff
    # do all your work here
  end
end

...e então chamar o método normalmente. A efetiva execução em segundo plano pode ser feita com qualquer solução que você desejar, mas o delayed_job já vem no pacote.

A abordagem de meta-programação escolhida pelo Ryan para declarar os métodos a serem executados em segundo plano também serve como documentação, e foca métodos específicos ao invés de exigir a criação de classes separadas para eles.

Você pode baixar o Backgrounded como gem ou baixar os fontes a partir do Github.

Apenas Um Comentário para “Backgrounded – Um encapsulador simples para rodar tarefas em segundo plano”

  1. #1
    nofxx Disse:

    Hmm.. realmente usar 'acts_as_way' eh interessante, porem eu ainda fico com o spawn:

    http://github.com/tra/spawn/tree

    Pra usar fork inves de thread. E o nome eh mais legal =D
    Eu ainda me perco nessa discussao, (allow_concurrency e tal)... Downside eh ser plugin, alguem tinha que gemify ele...

Deixe um Comentário