:@spawn
@spawn
Creates a closure around an expression and runs it on an automatically-chosen process, returning a RemoteRef to the result.
Examples
Examples:
-
Using @spawn to perform a simple computation:
julia> res = @spawn 2 + 2 RemoteRef{Channel{Any}}(1, 1, 2, Nullable{Any}())This example creates a closure around the expression
2 + 2and runs it on a automatically-chosen process. It returns aRemoteRefwhich represents the result of the computation. -
Spawning a more complex computation:
julia> a = [1, 2, 3, 4, 5]; julia> b = [6, 7, 8, 9, 10]; julia> res = @spawn sum(a .* b) RemoteRef{Channel{Any}}(1, 1, 2, Nullable{Any}())In this example,
@spawnis used to create a closure that calculates the dot product of arraysaandb. The result is stored in aRemoteRefobject. - Using @spawn in a loop:
julia> results = Vector{RemoteRef}() julia> for i in 1:10 push!(results, @spawn i^2) end julia> fetch.(results) 10-element Vector{Int64}: 1 4 9 16 25 36 49 64 81 100This example demonstrates how to use
@spawnin a loop. It spawns the computation ofi^2for each value ofifrom 1 to 10. Thefetch.function is then used to retrieve the results from theRemoteRefobjects.
Common mistake example:
julia> res = @spawn println("Hello, World!")
ERROR: `@spawn` macro: expression to `@spawn` must return a value to be fetched
In this example, the expression passed to @spawn is a println statement, which doesn't return a value. The @spawn macro expects an expression that returns a value, as it creates a closure around that expression and runs it on a separate process. Make sure the expression passed to @spawn returns a value that can be fetched.
See Also
accept, bind, :@spawn, connect, fetch, getaddrinfo, gethostname, getipaddr, getsockname, init_worker, IPv4, IPv6, isready, issocket, kill, listen, recv, recvfrom, remotecall, remotecall_fetch, remotecall_wait, RemoteRef, send, setopt,User Contributed Notes
Add a Note
The format of note supported is markdown, use triple backtick to start and end a code block.