我试图在julia中同时运行两个函数,但我不知道如何做到
function area(side::Float64)
return side*side
end
function f(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand())
end
end
return mat
end
function g(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand()*rand())
end
end
return mat
end
s1 = f(10)
s2 = g(10)
hcat(s1,s2)
在Julia 1.3中,您可以使用Threads.@spawn
:生成将在不同线程上调度的任务
begin
s1 = Threads.@spawn f(10)
s2 = Threads.@spawn g(10)
s1 = fetch(s1)
s2 = fetch(s2)
end
有关更多信息,请参阅公告博客文章:https://julialang.org/blog/2019/07/multithreading.
通常,在并行计算中有不同的"同时"概念。
既然你把你的问题标记为"多处理",让我给你一个简单的多进程解决方案(它应该适用于任何>=0.7的Julia版本(。因此,它使用了Julias内置的Distributed
计算工具。
using Distributed
nworkers() < 2 && addprocs(2) # add two worker processes if necessary
@everywhere begin # define your functions on both workers
area(side::Float64) = side*side
function f(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand())
end
end
return mat
end
function g(n::Int64)
mat = zeros(n,n)
for i=1:n
for j=1:n
mat[i,j] = area(rand()*rand())
end
end
return mat
end
end
# spawn tasks on the two workers (non-blocking)
t1 = @spawn f(10)
t2 = @spawn g(10)
# fetch the results (blocking until workers have finished)
r1 = fetch(t1)
r2 = fetch(t2)
hcat(r1,r2)
关于如何使用Distributed
进行并行计算检查的更多信息,例如,Julia文档的这一部分或我的一个研讨会上的Jupyter研讨会:Julia中的并行计算。