在提问之前请确定你已经努力阅读了文档,并且尝试自己在互联网上搜索。
请尽可能提供你的demo代码或者GitHub的gist地址。
# code
最近做课题需要用到julia的多进程中的共享数组,我创建了4个进程,并创建一个共享数组,希望对这个数组做一些操作,由于写的函数很长就不放了。执行函数的时候报告的错误为share未定义,但是我输入procs(share)的时候,是显示都可用的
为了测试到底怎么回事我写了一个最简单的函数,直接返回share的第一行
在提问之前请确定你已经努力阅读了文档,并且尝试自己在互联网上搜索。
请尽可能提供你的demo代码或者GitHub的gist地址。
# code
最近做课题需要用到julia的多进程中的共享数组,我创建了4个进程,并创建一个共享数组,希望对这个数组做一些操作,由于写的函数很长就不放了。执行函数的时候报告的错误为share未定义,但是我输入procs(share)的时候,是显示都可用的
为了测试到底怎么回事我写了一个最简单的函数,直接返回share的第一行
问题在于,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 问题。你帮他一下就好。把钱捐给动物保护救助组织也行
好的 非常感谢