मैं एक ऐसा फ़ंक्शन लिखने की कोशिश कर रहा हूं जो दो तर्क ले सकता है और फिर इसे multiprocessing.Pool
पर जोड़ सकता है और इसे समानांतर करता है। जब मैंने इस सरल कार्य को लिखने की कोशिश की तो मुझे कुछ जटिलताएं थीं।पायथन: मानचित्र और मल्टीप्रोसेसिंग का उपयोग
df = pd.DataFrame()
df['ind'] = [111, 222, 333, 444, 555, 666, 777, 888]
df['ind1'] = [111, 444, 222, 555, 777, 333, 666, 777]
def mult(elem1, elem2):
return elem1 * elem2
if __name__ == '__main__':
pool = Pool(processes=4)
print(pool.map(mult, df.ind.astype(int).values.tolist(), df.ind1.astype(int).values.tolist()))
pool.terminate()
यह एक त्रुटि लौटा रहा है:
TypeError: unsupported operand type(s) for //: 'int' and 'list'
मैं नहीं समझ सकता कि क्या गलत है। क्या कोई यह समझा सकता है कि इस त्रुटि का अर्थ क्या है और मैं इसे कैसे ठीक कर सकता हूं?
एक परीक्षण केस स्थापित करने के लिए टेम्पलेट। जीआईएल से बचने और सी में चलाने के लिए इसे आंतरिक रूप से 'पांडा' द्वारा नियंत्रित नहीं किया जा सकता है? पूल बनाने और इसका समन्वय करने के ऊपरी हिस्से का मतलब यह है कि यह एक मूर्ख दृष्टिकोण है (ओपीएस कठिनाई को ठीक करने के बावजूद)? – roganjosh
मुझे यकीन है कि पांडों में उचित रूप से इनपुट बनाने का एक तरीका है ताकि यह बेहतर हो सके। जहां तक ओवरहेड जाता है, वह शायद एप्लिकेशन विशिष्ट होगा, इसलिए मेरे लिए जवाब देना मुश्किल होगा। ईमानदार होने के लिए, मैं मल्टीप्रोसेसिंग का उपयोग करने के लिए थोड़ा नया हूं इसलिए मुझे नहीं लगता कि मैं आपके प्रश्नों का सबसे अच्छा जवाब जानूंगा। हालांकि, मैंने ओपी के विशिष्ट मुद्दे में भाग लिया है। – tmwilson26
मैं जांच करूंगा हालांकि मैं आज रात अपना खुद का टेस्ट केस नहीं प्राप्त कर सकता हूं। निश्चित रूप से मल्टीप्रोसेसिंग में स्पॉन्गिंग प्रक्रियाओं में एक बड़ा ओवरहेड होता है और यह मेरी समझ है कि इसे केवल वेक्टरिज्ड किया जा सकता है ... इस बिंदु पर कि यह इस दृष्टिकोण को अमान्य करता है। हालांकि मैं ऊपर से सवाल का जवाब देता हूं, मुझे लगता है कि दृष्टिकोण का आधार त्रुटिपूर्ण है, लेकिन खुद को सीख रहा है :) – roganjosh