2016-03-10 8 views
11

मानचित्र और map_async का उपयोग करने के बीच क्या अंतर है, क्या वे सूची से आइटम को 4 प्रक्रियाओं में वितरित करने के बाद समान कार्य नहीं चला रहे हैं। तो यह मानना ​​गलत है कि दोनों अतुल्यकालिक और समांतर चल रहे हैं।पायथन मल्टीप्रोसेसिंग: मानचित्र बनाम map_async

def f(x): 
    return 2*x 

p=Pool(4) 
l=[1,2,3,4] 
out1=p.map(f,l) 
#vs 
out2=p.map_async(f,l) 
+1

नक्शा पूरा होने के बाद ही नक्शा वापस नहीं लौटाता है (यानी समकालिक रूप से लेकिन समांतर में), जबकि 'map_async' तुरंत लौटता है और मैपिंग को अनुमति देता है पृष्ठभूमि में किया गया (यानी असीमित रूप से और समानांतर में)? –

उत्तर

18

प्रक्रियाओं के लिए नौकरियों को मैप करने के लिए चार विकल्प हैं। आपको बहु-तर्क, समवर्ती, अवरुद्ध करने और आदेश देने पर विचार करना होगा। map और map_asnyc अवरुद्ध करने के संबंध में केवल भिन्न है।

0 
1 
9 
4 
16 
25 
36 
49 
64 
81 
0 
HERE 
1 
4 
MORE 
16 
25 
36 
9 
49 
64 
81 
DONE 

pool.map(f, range(10)) उन समारोह के सभी 10 के लिए इंतजार करेंगे खत्म करने के लिए कहता है: map_async गैर अवरुद्ध जहां map रूप

ब्लॉक कर रहा है तो मान लीजिए कि आपने एक समारोह

from multiprocessing import Pool 
import time 

def f(x): 
    print x*x 

if __name__ == '__main__': 
    pool = Pool(processes=4) 
    pool.map(f, range(10)) 
    r = pool.map_async(f, range(10)) 
    # DO STUFF 
    print 'HERE' 
    print 'MORE' 
    r.wait() 
    print 'DONE' 

उदाहरण आउटपुट था है इसलिए हम एक पंक्ति में सभी प्रिंट देख रहे हैं r = pool.map_async(f, range(10)) उन्हें अतुल्यकालिक रूप से निष्पादित करेगा और r.wait() कहा जाता है जब हम केवलदेखेंगेऔर MORE के बीच में DONE हमेशा

+1

ठीक है तो अगर मेरे पास सूची में फ़ंक्शन f निष्पादित करने के अलावा अन्य कार्य नहीं हैं, तो मानचित्र और map_async समान हैं – aman

+3

बिल्कुल नहीं। आप देखेंगे कि मानचित्र क्रम में निष्पादित होगा, लेकिन map_async – quikst3r

+1

नहीं है 'r.wait() 'के बाद' प्रिंट 'हो सकता है? – HBeel

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