pony-patterns icon indicating copy to clipboard operation
pony-patterns copied to clipboard

Describe the supervisor/worker pattern

Open mfelsche opened this issue 7 years ago • 0 comments

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

mfelsche avatar Nov 03 '17 18:11 mfelsche