मुझे खेद है कि यह कुछ लोगों के लिए बहुत आसान है, लेकिन मुझे अभी भी पाइथन के मल्टीप्रोसेसिंग के साथ चाल नहीं मिल रही है। मैंने
http://docs.python.org/dev/library/multiprocessing
http://pymotw.com/2/multiprocessing/basics.html और कई अन्य ट्यूटोरियल और उदाहरण जो Google मुझे देता है ... उनमें से कई भी यहां से हैं।समानांतर प्रक्रियाओं के लिए पायथन मल्टीप्रोसेसिंग
ठीक है, मेरी स्थिति यह है कि मुझे कई numpy matrices की गणना करना है और मुझे बाद में उन्हें एक एकल मैपिक्स में स्टोर करने की आवश्यकता है। मान लीजिए कि मैं 20 कोर का उपयोग करना चाहता हूं (या मैं 20 कोर का उपयोग कर सकता हूं) लेकिन मैंने पूल संसाधन का सफलतापूर्वक उपयोग नहीं किया है क्योंकि यह पूल "मरने" तक जीवित रहता है। इसलिए मैं कुछ इस तरह कर रही पर सोचा:
from multiprocessing import Process, Queue
import numpy as np
def f(q,i):
q.put(np.zeros((4,4)))
if __name__ == '__main__':
q = Queue()
for i in range(30):
p = Process(target=f, args=(q,))
p.start()
p.join()
result = q.get()
while q.empty() == False:
result += q.get()
print result
लेकिन तब यह प्रक्रियाओं की तरह लग रहा समानांतर में नहीं चला लेकिन वे क्रमिक रूप से चलाने (कृपया मुझे ठीक कर लें मैं गलत हूँ) और मैं अगर पता नहीं है वे अपनी गणना करने के बाद मर जाते हैं (इसलिए 20 से अधिक प्रक्रियाओं के लिए जिन लोगों ने अपना हिस्सा किसी अन्य प्रक्रिया के लिए कोर मुक्त छोड़ दिया)। इसके अलावा, एक बहुत बड़ी संख्या के लिए (चलो 100.000 कहें), एक कतार में उन सभी मैट्रिक्स (जो वास्तव में भी बड़ा हो सकता है) को संग्रहीत करना बहुत मेमोरी का उपयोग करेगा, कोड को बेकार कर देगा क्योंकि विचार प्रत्येक पुनरावृत्ति पर हर परिणाम डालना है अंतिम परिणाम में, लॉक (और इसकी अधिग्रहण() और रिलीज() विधियों का उपयोग करने की तरह), लेकिन यदि यह कोड समांतर प्रसंस्करण के लिए नहीं है, तो लॉक भी बेकार है ...
मुझे उम्मीद है कि कोई मदद कर सकता है मुझे।
अग्रिम धन्यवाद!
आपके उत्तर के लिए धन्यवाद! मैं पहले समाधान को और समझता हूं, और मुझे कॉलबैक बहुत उपयोगी लगता है क्योंकि imap_unordered सभी परिणामों को स्टोर करने लगता है, और यही वह है जो मैं स्मृति नहीं खाने के क्रम में करना चाहता हूं। पूल के लिए, मुझे यकीन नहीं है (जो मैंने maxtasksperchild विशेषता के बारे में पढ़ा है) कि अगर मेरे पास "x" प्रोसेसर हैं, तो "x" प्रक्रियाएं "x" पहली प्रक्रियाओं के मरने के बाद चलती हैं।मुझे यह भी यकीन नहीं है कि पहली "x" प्रक्रियाओं के लिए आवंटित स्मृति कॉलबैक के बाद निःशुल्क है या नहीं। मैं कई और बड़े मैट्रिस का उपयोग करते समय अपने पीसी को "ब्लॉक" न करने के क्रम में पूछता हूं – Carlos
ओह! मुझे लगता है कि अब मैं इसे प्राप्त करता हूं: जब तक पूल जीवित रहता है तब तक मजदूर जीवित होते हैं, लेकिन जैसे ही वे एक प्रक्रिया पूरी करते हैं, वे संसाधनों को मुक्त करते हैं और फिर अगली प्रक्रिया लेते हैं और गणना करते हैं ... क्या यह है? – Carlos
यूप, यह इसके बारे में है। मैं 'पूल' के बारे में ज्यादा चिंता नहीं करता हूं या एक विकल्प नहीं ढूंढता जब तक कि वास्तव में आपके पास प्रोफाइलिंग प्रोफाइल न हो, यह इंगित करता है कि यह एक समस्या है। अनुकूलन आप कर सकते हैं, लेकिन जब तक आप प्रदर्शन नहीं करते हैं कि आपके असली सिस्टम में कोई समस्या है, उनमें से अधिकतर परेशानी के लायक नहीं हैं। –