Packages
verk
0.9.1
1.7.3
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.4.1
1.4.0
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.2
1.0.1
1.0.0
0.14.1
0.14.0
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
Verk is a job processing system backed by Redis.
Current section
Files
Jump to
Current section
Files
lib/verk/worker.ex
defmodule Verk.Worker do
@moduledoc """
Worker executes the job, messages the manager when it's done and shutdowns
"""
use GenServer
require Logger
@doc false
def start_link(args \\ []) do
GenServer.start_link(__MODULE__, args)
end
@doc """
Ask the worker to perform the job
"""
@spec perform_async(pid, pid, atom, list(term), binary) :: :ok
def perform_async(worker, manager, module, args, job_id) do
GenServer.cast(worker, { :perform, module, args, job_id, manager })
end
@doc false
def init(_args \\ []), do: { :ok, nil }
@doc false
def handle_cast({ :perform, module, args, job_id, manager }, state) do
apply(String.to_atom("Elixir.#{module}"), :perform, args)
GenServer.cast(manager, { :done, self, job_id })
{ :stop, :normal, state }
end
end