2012-07-05 37 views
28

मैं पाइथन के मल्टीप्रोसेसिंग पैकेज का उपयोग करने के तरीके सीखने की कोशिश कर रहा हूं, लेकिन मुझे map और imap के बीच का अंतर नहीं समझा।पायथन मल्टीप्रोसेसिंग: मानचित्र और इमेप के बीच क्या अंतर है?

क्या अंतर map एक वास्तविक सरणी या सेट देता है, कहता है, imap एक सरणी या सेट पर एक पुनरावर्तक देता है? मैं एक दूसरे पर कब उपयोग करूंगा?

इसके अलावा, मुझे समझ में नहीं आता कि चुनौती तर्क क्या है। क्या यह प्रत्येक प्रक्रिया को पारित मूल्यों की संख्या है?

+1

निकटता से संबंधित: [multiprocessing.pool: map_async और imap के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/26520781/multiprocessing-pool-whats-the-difference-between-map-async-and -मैप/26521507 # 26521507) – dano

उत्तर

25

यह अंतर है। नक्शा के बजाय आप इमेप का उपयोग क्यों कर सकते हैं एक कारण यह है कि अगर आप पहले कुछ परिणामों को संसाधित करना चाहते हैं तो बाकी की गणना की प्रतीक्षा किए बिना। मानचित्र लौटने से पहले हर परिणाम के लिए इंतजार कर रहा है।

चंक्साइज के लिए, कभी-कभी बड़ी मात्रा में काम करने के लिए और अधिक कुशल होता है क्योंकि जब भी कार्यकर्ता अधिक काम करने का अनुरोध करता है, वहां आईपीसी और सिंक्रनाइज़ेशन ओवरहेड होता है।

+0

तो फिर कैसे एक चंक्साइज के लिए उचित मूल्य निर्धारित करने का दृष्टिकोण करता है? यदि पिकलिंग के कारण बड़ा आईपीसी और सिंक ओवरहेड का मतलब है, तो ट्रेडऑफ क्या है? (यानी क्यों 'chunksize == len (iterable)' एक बुरा विचार चुन रहा है, या यह है?) –

+0

@Adam यदि आप 'chunksize = len (iterable)' चुनते हैं, तो सभी नौकरियों को एक ही प्रक्रिया में सौंपा जाएगा! 'लेन (पुन: प्रयोज्य) // numprocesses' अधिकतम है जो उपयोगी है। ट्रेडऑफ सिंक्रनाइज़ेशन ओवरहेड और सीपीयू उपयोग के बीच है (बड़े चुने हुए कुछ प्रक्रियाओं को दूसरों के सामने खत्म करने का कारण बनेंगे, संभावित प्रसंस्करण समय बर्बाद कर देंगे)। – Antimony

+0

ठीक है, मैं इसे देखता हूं, लेकिन इसका मतलब यह है कि किसी उचित सेटिंग में विशेष डेटा पर परीक्षण और त्रुटि के लिए एक उचित चुनौती उबाल लेना मतलब है? –

0

imap itertools मॉड्यूल जो python.Map में तेजी से और स्मृति दक्षता के लिए प्रयोग किया जाता है सूची वापस आ जाएगी से वह जगह है जहाँ imap वस्तु जो प्रत्येक पुनरावृत्तियों के लिए मूल्यों को उत्पन्न करता है (अजगर 2.7 में) रिटर्न के रूप में नीचे व्याप्ति कोड ब्लॉक अंतर को साफ़ करेंगे।

मानचित्र रिटर्न सूची मुद्रित किया जा सकता सीधे

from itertools import * 
    from math import * 

    integers = [1,2,3,4,5] 
    sqr_ints = map(sqrt, integers) 
    print (sqr_ints) 

imap रिटर्न वस्तु जो सूची परिवर्तित और मुद्रित किया जाता है।

from itertools import * 
from math import * 

integers = [1,2,3,4,5] 
sqr_ints = imap(sqrt, integers) 
print list(sqr_ints) 

Chunksize कर देगा iterable निर्दिष्ट आकार के टुकड़े (अनुमानित) में विभाजित किया जा करने के लिए और प्रत्येक टुकड़ा एक अलग कार्य के रूप में प्रस्तुत किया जाता है।

संबंधित मुद्दे