ParallelStream

Parallel stream implementation for Elixir.

Summary

Functions

Creates a stream that will apply the given function on enumeration in parallel. The functions return value will be thrown away, hence this is useful for producing side-effects

Creates a stream that will apply the given function on enumeration in parallel and only pass the values for which the function returns truthy downstream

Creates a stream that will apply the given function on enumeration in parallel and return the functions return value

Creates a stream that will apply the given function on enumeration in parallel and only pass the values for which the function returns falsy downstream

Functions

each(stream, iter, options \\ [])

Creates a stream that will apply the given function on enumeration in parallel. The functions return value will be thrown away, hence this is useful for producing side-effects.

Options

These are the options:

  • :num_pipes – The number of parallel operations to run when running the stream.

Examples

Iterate and write the numbers to stdout:

iex> parallel_stream = 1..5 |> ParallelStream.each(&IO.write/1)
iex> parallel_stream |> Enum.to_list
12345
[1,2,3,4,5]
filter(stream, filter, options \\ [])

Creates a stream that will apply the given function on enumeration in parallel and only pass the values for which the function returns truthy downstream.

Options

These are the options:

  • :num_pipes – The number of parallel operations to run when running the stream.

Examples

Map and filter the even numbers:

iex> parallel_stream = 1..5 |> ParallelStream.filter(fn i -> i |> rem(2) == 0 end)
iex> parallel_stream |> Enum.to_list
[2,4]
map(stream, mapper, options \\ [])

Creates a stream that will apply the given function on enumeration in parallel and return the functions return value.

Options

These are the options:

  • :num_pipes – The number of parallel operations to run when running the stream.

Examples

Map and duplicate the numbers:

iex> parallel_stream = 1..5 |> ParallelStream.map(fn i -> i * 2 end)
iex> parallel_stream |> Enum.to_list
[2, 4, 6, 8, 10]
reject(stream, filter, options \\ [])

Creates a stream that will apply the given function on enumeration in parallel and only pass the values for which the function returns falsy downstream.

Options

These are the options:

  • :num_pipes – The number of parallel operations to run when running the stream.

Examples

Map and reject the even numbers:

iex> parallel_stream = 1..5 |> ParallelStream.reject(fn i -> i |> rem(2) == 0 end)
iex> parallel_stream |> Enum.to_list
[1,3,5]