Thanks Tim. One more work around which I found for this was : julia> @spawnat 2 global a=5
This references the global variable 'a' from inside the function. I don't know if this would be a correct way to do it, but it seems to work. On Thursday, 30 October 2014 17:30:20 UTC-4, Tim Holy wrote: > > Others know much more about this area than I do, so hopefully they'll > chime in > and correct anything I say that's wrong. > > @spawnat (and similar functions) "localize" variables on remote workers by > effectively wrapping them in let blocks. That means that when the command > finishes, the (new) a goes out of scope. > > You can achieve what you seem to want this way: > > remotecall(2, ()->eval(Main,:(a=5))) > > See how the @everywhere macro is defined (in base/multi.jl). You could > define a > similar @somewhere (or something) that allows you to evaluate the > expression > on a specified process. > > But I suspect you can also use RemoteRefs as variables, in which case this > issue presumably won't come up. There's a small illustration of this > technique > in the Parallel Computing section of the manual _if_ you select "latest". > (Perhaps that change should be backported to 0.3.) > > --Tim > > On Thursday, October 30, 2014 11:13:07 AM Kanu Sahai wrote: > > Hello > > > > I am a beginner in Julia and have been trying to build an application in > > it. Although, I am facing a conceptual doubt. > > > > I am working with 4 worker processes on one node. > > > > > addprocs(4) > > > > I define a variable 'a' on all the processes. > > > > julia> @everywhere a=4 > > > > Next, I try to modify the value of 'a' at worker#2 > > > > julia> @spawnat 2 a=5 > > RemoteRef(2,1,16) > > > > julia> fetch(ans) > > 5 > > > > Now, if I print the value of 'a' at all processors, I get : > > > > julia> @everywhere println(a) > > 4 > > From worker 2: 4 > > From worker 4: 4 > > From worker 5: 4 > > From worker 3: 4 > > > > Why is the modified value of 'a' not reflected here ? Am I missing > > something in the logic ? > > > > Thanks so much! > >