pony-patterns
pony-patterns copied to clipboard
Describe the supervisor/worker pattern
It has been raised as a question several times and is worth explaining as a pony pattern. An example from @SeanTAllen is here:
actor Main
new create(env: Env) =>
Supervisor(env.out).run()
actor Worker
let _supervisor: Supervisor
new create(supervisor: Supervisor) =>
_supervisor = supervisor
be work() =>
// do some stuff
_supervisor.done(this)
actor Supervisor
let _out: StdStream
let _worker: Worker
new create(out: StdStream) =>
_out = out
_worker = Worker(this)
be run() =>
_worker.work()
be done(worker: Worker) =>
if (worker is _worker) then
_out.print("My worker finished\n")
else
_out.print("Odd, a worker that isn't mine told me it was done. Weird\n")
end
https://playground.ponylang.org/?gist=1b8684fef6a856fcebbf3528f05214cd