共享数组在函数中为什么显示未定义(酬劳30软妹币)已解决

在提问之前请确定你已经努力阅读了文档,并且尝试自己在互联网上搜索。

请尽可能提供你的demo代码或者GitHub的gist地址。

# code

最近做课题需要用到julia的多进程中的共享数组,我创建了4个进程,并创建一个共享数组,希望对这个数组做一些操作,由于写的函数很长就不放了。执行函数的时候报告的错误为share未定义,但是我输入procs(share)的时候,是显示都可用的
为了测试到底怎么回事我写了一个最简单的函数,直接返回share的第一行

但是显示未定义,我实在无法解决,希望有大佬可以解决,小弟愿奉上30软妹币酬劳。觉得我没讲清楚的可以留言,加QQ1197296672细聊也行,非常感谢各位大佬

问题在于,share这个名字只在1号process里面存在。记住share只是个名字,它的内容在所有process里都知道,只是它们(除了1号process)都不知到share跟其实际内容的联系。

其实很简单。

@everywhere function tests(another_name)
    return another_name[1,:]
end

x = @spawnat 2 tests(share)

test函数接收一个arg即可。

还有,把代码拷贝进来,不要只贴图。方便他人拷贝你的代码

或者在创建是就用@everywhere

using Distributed
nprocs()
addprocs()
nprocs()

@everywhere using SharedArrays

@everywhere a = ShareArray(rand(1_000_000))

fetch(@spawnat 1 a[1])
fetch(@spawnat 2 a[1])

a[1] = 0

fetch(@spawnat 2 a[1]) # will give 0 because the sharedarray is changed at index 1

非常感谢,麻烦回复一下支付宝账号

要不这样,以后有谁问你Julia 问题。你帮他一下就好。把钱捐给动物保护救助组织也行

1 个赞

好的 非常感谢 :smile: :smile: :smile: