Tasks

Julia has a built-in system for running tasks, which are, in general, known as coroutines. With this, a computation that generates values (with a produce function) can be suspended as a task, while a consumer task can pick up the values (with a consume function). This is similar to the yield keyword in Python.

As a concrete example, let's take a look at a fib_producer function that calculates the first n Fibonacci numbers (refer to the Recursive functions section in Chapter 3, Functions), but it doesn't return the numbers, it produces them:

# code in Chapter 4\tasks.jl
function fib_producer(n)
    a, b = (0, 1)
    for i = 1:n
        produce(b)
        a, b = (b, a + b)
    end
end

If you call this function as fib_producer(5), it waits indefinitely. Instead you have ...

Get Getting Started with Julia now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.