के साथ असंगत है मैं मल्टीप्रोसेसिंग का उपयोग करके एक साधारण परीक्षण चलाने की कोशिश कर रहा हूं। जब तक मैं numpy आयात नहीं करता तब तक परीक्षण अच्छी तरह से काम करता है (भले ही यह प्रोग्राम में उपयोग नहीं किया जाता है)।मल्टीप्रोसेसिंग NumPy
from multiprocessing import Pool
import time
import numpy as np #this is the problematic line
def CostlyFunc(N):
""""""
tstart = time.time()
x = 0
for i in xrange(N):
for j in xrange(N):
if i % 2: x += 2
else: x -= 2
print "CostlyFunc : elapsed time %f s" % (time.time() - tstart)
return x
#serial application
ResultList0 = []
StartTime = time.time()
for i in xrange(3):
ResultList0.append(CostlyFunc(5000))
print "Elapsed time (serial) : ", time.time() - StartTime
#multiprocessing application
StartTime = time.time()
pool = Pool()
asyncResult = pool.map_async(CostlyFunc, [5000, 5000, 5000])
ResultList1 = asyncResult.get()
print "Elapsed time (multiporcessing) : ", time.time() - StartTime
अगर मैं परिणाम numpy आयात नहीं करते है:
CostlyFunc : elapsed time 2.866265 s
CostlyFunc : elapsed time 2.793213 s
CostlyFunc : elapsed time 2.794936 s
Elapsed time (serial) : 8.45455098152
CostlyFunc : elapsed time 2.889815 s
CostlyFunc : elapsed time 2.891556 s
CostlyFunc : elapsed time 2.898898 s
Elapsed time (multiporcessing) : 2.91595196724
कुल बीता हुआ समय, समय 1 प्रक्रिया के लिए आवश्यक के समान है जिसका अर्थ है कि गणना की गई है यहाँ कोड है parallelized। अगर मैं numpy आयात परिणाम कर हो जाता है:
CostlyFunc : elapsed time 2.877116 s
CostlyFunc : elapsed time 2.866778 s
CostlyFunc : elapsed time 2.860894 s
Elapsed time (serial) : 8.60492110252
CostlyFunc : elapsed time 8.450145 s
CostlyFunc : elapsed time 8.473006 s
CostlyFunc : elapsed time 8.506402 s
Elapsed time (multiporcessing) : 8.55398178101
कुल समय बीत दोनों धारावाहिक और बहु तरीकों के लिए एक ही है, क्योंकि केवल एक कोर प्रयोग किया जाता है। यह स्पष्ट है कि समस्या numpy से आता है। क्या यह संभव है कि मेरे पास मल्टीप्रोसेसिंग और न्यूमपी के मेरे संस्करणों के बीच असंगतता हो?
मैं वर्तमान में Python2.7, NumPy 1.6.2 का उपयोग कर रहा है और लिनक्स पर 0.70a1 बहु
यह बहुत अजीब है- यह ओएसएक्स पर पाइथन 2.7 और न्यूपी 1.7 के साथ ठीक काम करता प्रतीत होता है। समय से यह तीन कोरों की तरह दिखता है, लेकिन प्रसंस्करण का समय धीमा हो जाता है- क्या आप इसकी पुष्टि कर सकते हैं? – Daniel
आपके उत्तर के लिए धन्यवाद। मुझे पूरा यकीन है कि गणना केवल 1 कोर पर की जाती है जब मैं NumPy आयात करता हूं (मैंने mpstat (http://linuxcommand.org/man_pages/mpstat1.html) के साथ चेक किया है)। ऐसा प्रतीत होता है कि एक ही कोर एक ही समय में 3 नौकरियों की गणना करता है: इसलिए प्रत्येक नौकरियां ~ 8.5 सेकंड लेती हैं लेकिन कुल समय भी ~ 8.5 सेकंड होता है। – user2660966
मैंने numpy 1.6.1, numpy 1.6.2 और numpy 1.7.1 के साथ प्रयास किया ... एक ही समस्या – user2660966