NAME
BusyBird::Flow - CPS data flow with concurrency regulation
SYNOPSIS
use BusyBird::Flow;
my $flow = BusyBird::Flow->new();
$flow->add(sub {
my ($data, $done) = @_;
my $new_data = transform($data);
$done->($new_data);
});
$flow->add(sub {
my ($data, $done) = @_;
transform_async($data, sub {
my $new_data = shift;
$done->($new_data);
});
});
$flow->execute('some_data', sub {
my ($result_data) = @_;
print "Result: $result_data\n";
});
DESCRIPTION
This module is a part of BusyBird::Timeline. For now, it is not meant to be used individually.
This module takes CPS (continuation-passing style) subroutines as "filters" and executes them sequentially to a given data. The result of a filter is given to the next filter, so the data flow is so-called "waterfall" model.
In the data flow, the number of data flowing simultaneously is limited. If additional data is pushed to the flow, it will be delayed in a queue that is built in the flow.
This module uses BusyBird::Log for logging.
CLASS METHODS
$flow = BusyBird::Flow->new()
Creates the flow object.
OBJECT METHODS
$flow->add($filter)
Add a filter to the $flow
.
When $flow
is execute
d, $filter
is called like
$filter->($data, $done)
When $filter
finishes its job, it is supposed to call $done
with the result of the filter.
$done->($result)
$flow->execute($data, $finish_callback)
Execute the flow on the $data
.
When the flow ends, the result will be given to $finish_callback
as in
$finish_callback->($result)
AUTHOR
Toshio Ito <toshioito [at] cpan.org>