मैं मल्टीप्रोसेसिंग मॉड्यूल के साथ उपयोग के लिए साझा मेमोरी में एक संख्यात्मक सरणी का उपयोग करना चाहूंगा। कठिनाई इसे एक संख्यात्मक सरणी की तरह उपयोग कर रही है, और केवल ctypes सरणी के रूप में नहीं।
from multiprocessing import Process, Array
import scipy
def f(a):
a[0] = -a[0]
if __name__ == '__main__':
# Create the array
N = int(10)
unshared_arr = scipy.rand(N)
arr = Array('d', unshared_arr)
print "Originally, the first two elements of arr = %s"%(arr[:2])
# Create, start, and finish the child processes
p = Process(target=f, args=(arr,))
p.start()
p.join()
# Printing out the changed values
print "Now, the first two elements of arr = %s"%arr[:2]
यह उत्पादन जैसे:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
सरणी को ctypes तरीके से एक्सेस किया जा सकता है, उदाहरण के लिए arr[i]
समझ में आता है। हालाँकि, यह कोई सुपीरियर एरे नहीं है, और मैं ऑपरेशन जैसे -1*arr
, या नहीं कर सकता arr.sum()
। मुझे लगता है कि ctypes सरणी को एक सुपीरियर सरणी में बदलने के लिए एक समाधान होगा। हालाँकि (इसके अलावा यह काम करने में सक्षम नहीं है), मुझे नहीं लगता कि इसे अब साझा किया जाएगा।
ऐसा लगता है कि एक सामान्य समस्या के लिए एक मानक समाधान होगा।
subprocess
बजाय के बारे में पूछ रहा है multiprocessing
।