Buffalo

An Erlang app for delayed process execution.

buffalo:start().
buffalo:queue({Module, Function, Args}, #{ timeout => Delay }).

Will call the MFA after Delay milliseconds. When calling queue/2 with the same MFA arguments again without the first one being executed yet, the execution of the first one is cancelled and it will take again Delay ms. for the MFA to be called.

For guaranteed execution, the MFA is called within a worker gen_server as part of the buffalo_worker_sup supervisor.

Timeout

The default timeout is 500 msec.

Deadline

The MFA is guaranteed to be executed at a defined deadline. The default deadline is 5 times the given timeout (defaults to 2500 msec).

A specific deadline can be specified:

buffalo:queue({Module, Function, Args}, #{ timeout => 100, deadline => 250 }).

Unique Key

Normally the tasks are deduplicated by matching on the complete MFA. It is possible to supply an identifying key instead. This makes it possible to update the MFA associated with the key.

buffalo:queue(Key, MFA, #{ timeout => 50, deadline => 400 }).