दिलचस्प पोस्ट
स्प्रिंग जेपीए के साथ नरम हटाए गए हैंडलिंग का अर्थ – <? Xml संस्करण = "1.0" एन्कोडिंग = "यूटीएफ -8"?> बैच फ़ाइलों में कौन सी टिप्पणी शैली का उपयोग करना चाहिए? क्या nsstring के भाग के रूप में उद्धरण चिह्न शामिल करना संभव है? एक onkeyup घटना को ट्रिगर करने के लिए कैसे करें जब तक कोई उपयोगकर्ता अपनी टाइपिंग को रोकता नहीं है? पार्सिंग के दौरान अजगर अनपेक्षित EOF कैसे एंड्रॉइड के साथ हिला घटना का पता लगाने के लिए? बिना नई लाइन प्रिंटिंग (प्रिंट 'ए',) एक जगह प्रिंट करती है, कैसे निकालें? .NET में क्या विशेषताएं हैं? अभिविन्यास परिवर्तन कैसे पता लगा सकता है? जावास्क्रिप्ट: document.execCommand क्रॉस-ब्राउज़र? एंड्रॉइड पर एसवीजी समर्थन जब एक संख्या की उम्मीद होती है तो स्ट्रिंग टाइप करते समय कान के साथ अनंत लूप जेएसएफ घटक बीन की संपत्ति के बिना बाध्यकारी उत्तरदायी छवि मानचित्र

जूलिया: जूलिया में एक अन्य प्रोसेसर को डेटा कैसे कॉपी करें

आप जूलिया में एक प्रोसेसर से दूसरे डेटा को कैसे स्थानांतरित करते हैं?

कहो मेरे पास एक सरणी है

a = [1:10] 

या कुछ अन्य डेटा संरचना इसे अन्य सभी उपलब्ध प्रोसेसरों पर रखने का सही तरीका क्या है, ताकि ये प्रोसेसर पर एक ही चर नाम के रूप में उपलब्ध हो?

वेब के समाधान से एकत्रित समाधान "जूलिया: जूलिया में एक अन्य प्रोसेसर को डेटा कैसे कॉपी करें"

मुझे यह नहीं पता था कि यह पहली बार कैसे करना है, इसलिए मैंने इसे कुछ समय व्यतीत किया।

यहां कुछ फ़ंक्शंस हैं जिन्हें मैं ऑब्जेक्ट पास करने के लिए लिखा था:

sendto

निर्दिष्ट प्रक्रियाओं के लिए एक अनियंत्रित संख्या चर को भेजें।

नई चर निर्दिष्ट प्रक्रियाओं पर मुख्य मॉड्यूल में बनाए गए हैं। नाम कीवर्ड तर्क की कुंजी होगी और मूल्य संबद्ध मूल्य होगा।

 function sendto(p::Int; args...) for (nm, val) in args @spawnat(p, eval(Main, Expr(:(=), nm, val))) end end function sendto(ps::Vector{Int}; args...) for p in ps sendto(p; args...) end end 

उदाहरण

 # creates an integer x and Matrix y on processes 1 and 2 sendto([1, 2], x=100, y=rand(2, 3)) # create a variable here, then send it everywhere else z = randn(10, 10); sendto(workers(), z=z) 

getfrom

एक मनमाना प्रक्रिया पर एक मनमाना मॉड्यूल में परिभाषित ऑब्जेक्ट पुनर्प्राप्त करें। मुख्य मॉड्यूल के लिए डिफ़ॉल्ट

पुनर्प्राप्त किए जाने वाले ऑब्जेक्ट का नाम प्रतीक होना चाहिए।

 getfrom(p::Int, nm::Symbol; mod=Main) = fetch(@spawnat(p, getfield(mod, nm))) 

उदाहरण

 # get an object from named x from Main module on process 2. Name it x x = getfrom(2, :x) 

passobj

एक प्रक्रिया से मनमाना प्रक्रियाओं को मनमाना करने वाले नंबरों से गुजारें। वेरिएबल को src प्रक्रिया के from_mod मॉड्यूल में परिभाषित किया जाना चाहिए और प्रत्येक लक्ष्य प्रक्रिया पर to_mod मॉड्यूल को एक ही नाम के तहत कॉपी किया जाएगा।

 function passobj(src::Int, target::Vector{Int}, nm::Symbol; from_mod=Main, to_mod=Main) r = RemoteRef(src) @spawnat(src, put!(r, getfield(from_mod, nm))) for to in target @spawnat(to, eval(to_mod, Expr(:(=), nm, fetch(r)))) end nothing end function passobj(src::Int, target::Int, nm::Symbol; from_mod=Main, to_mod=Main) passobj(src, [target], nm; from_mod=from_mod, to_mod=to_mod) end function passobj(src::Int, target, nms::Vector{Symbol}; from_mod=Main, to_mod=Main) for nm in nms passobj(src, target, nm; from_mod=from_mod, to_mod=to_mod) end end 

उदाहरण

 # pass variable named x from process 2 to all other processes passobj(2, filter(x->x!=2, procs()), :x) # pass variables t, u, v from process 3 to process 1 passobj(3, 1, [:t, :u, :v]) # Pass a variable from the `Foo` module on process 1 to Main on workers passobj(1, workers(), [:foo]; from_mod=Foo) 

बस यहाँ हर कोई जानता है, मैं इन विचारों को एक साथ पैकेज के लिए ParallelDataTransfer.jl रखा । तो आपको बस इतना करना होगा

 using ParallelDataTransfer 

(स्थापित करने के बाद) यहां दिए गए उत्तरों में उल्लिखित फ़ंक्शन का उपयोग करने के लिए। क्यूं कर? ये फ़ंक्शन बहुत उपयोगी हैं! मैंने कुछ परीक्षण, कुछ नए मैक्रोज़ जोड़े, और उन्हें थोड़ा अपडेट किया (वे v0.5 पास करते हैं, v0.4.x पर विफल होते हैं)। इन्हें संपादित करने और अधिक जोड़ने के लिए पुल अनुरोधों को डाल करने के लिए स्वतंत्र महसूस करें

@eval @everywhere... उपयोग करें @eval @everywhere... और स्थानीय चर से बचें इस तरह:

 julia> a=collect(1:3) 3-element Array{Int64,1}: 1 2 3 julia> addprocs(1) 1-element Array{Int64,1}: 2 julia> @eval @everywhere a=$a julia> @fetchfrom 2 a 3-element Array{Int64,1}: 1 2 3 

@ स्पेन्सरलाइन 2 के उत्तर के पूरक के लिए यहां कुछ मैक्रो हैं:

 function sendtosimple(p::Int, nm, val) ref = @spawnat(p, eval(Main, Expr(:(=), nm, val))) end macro sendto(p, nm, val) return :( sendtosimple($p, $nm, $val) ) end macro broadcast(nm, val) quote @sync for p in workers() @async sendtosimple(p, $nm, $val) end end end 

@spawnat मैक्रो किसी विशेष प्रक्रिया के प्रतीक के लिए एक मान को बांधता है

 julia> @sendto 2 :bip pi/3 RemoteRef{Channel{Any}}(9,1,5340) julia> @fetchfrom 2 bip 1.0471975511965976 

@broadcast मैक्रो 1 को छोड़कर सभी प्रक्रियाओं में एक प्रतीक के लिए एक मान बांधता है (जैसा कि मैंने ऐसा कर पाया है कि भविष्य की अभिव्यक्तियों का प्रयोग करते हुए संस्करण 1 प्रक्रिया से संस्करण की प्रतिलिपि बनाते हैं)

 julia> @broadcast :bozo 5 julia> @fetchfrom 2 bozo 5 julia> bozo ERROR: UndefVarError: bozo not defined julia> bozo = 3 #these three lines are why I exclude pid 1 3 julia> @fetchfrom 7 bozo 3 julia> @fetchfrom 7 Main.bozo 5