यह लगता है कि आप multiprocessing
मॉड्यूल का उपयोग कर रहे हैं। आपने यह नहीं कहा, और यह जानकारी का एक महत्वपूर्ण हिस्सा है।
.map()
multiprocessing.Pool()
पर फ़ंक्शन दो तर्क लेता है: एक फ़ंक्शन, और अनुक्रम। समारोह अनुक्रम से लगातार मूल्यों के साथ बुलाया जाएगा। आप y
और एक अनुक्रम पास करने की कोशिश कर रहे हैं और यह काम नहीं करेगा।
आप इस तरह एक अनुक्रम बना सकते हैं: ((y, x) for x in input)
, और एक फ़ंक्शन लिखें जो एक तर्क, एक ट्यूपल लेता है, और फिर इसके साथ सही काम करता है।
मैंने डिस्क फ़ाइलों को पढ़ने और लिखने वाली प्रक्रियाओं को चलाने के लिए केवल multiprocessing.Pool()
का उपयोग किया है, इसलिए मुझे यकीन नहीं है कि बुनियादी विचार यहां कैसे काम करेगा: मुझे यकीन नहीं है कि आप ऐसा करने की कोशिश कर रहे हैं जैसे आप एक ऐसा वाक्य बदल सकते हैं ।
मैं आपके फ़ंक्शन से मूल्यों को वापस पास करने की अनुशंसा करता हूं, फिर अपना अंतिम परिणाम बनाने के लिए उन्हें एकत्रित करता हूं। मैं तो बस इस कोड का परीक्षण किया और यह काम करता है:
import multiprocessing as mp
def f(x):
return (x, x*x)
if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
result = dict(pool.map(f, inputs))
result
पर सेट है: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
की यह इतना है कि बजाय कंप्यूटिंग x*x
की बदलें कि यह कुछ सत्ता में x
बढ़ा देंगे, और बिजली प्रदान की जाएगी। और चलिए इसे एक स्ट्रिंग कुंजी तर्क लेते हैं। इसका मतलब है कि f()
को एक ट्यूपल तर्क लेने की आवश्यकता है, जहां ट्यूपल (key, x, p)
होगा और यह x**p
की गणना करेगा।
import multiprocessing as mp
def f(tup):
key, x, p = tup # unpack tuple into variables
return (key, x**p)
if __name__ == '__main__':
pool = mp.Pool()
inputs = range(10)
inputs = [("1**1", 1, 1), ("2**2", 2, 2), ("2**3", 2, 3), ("3**3", 3, 3)]
result = dict(pool.map(f, inputs))
आप कई दृश्यों है और आप उन्हें एक साथ शामिल होने के लिए ऊपर के लिए एक एकल अनुक्रम बनाने के लिए की जरूरत है, zip()
या शायद itertools.product
का उपयोग कर इस पर गौर।
यह रेडिस के लिए नौकरी की तरह लगता है! –
रेडिस क्या है ?? – Amir
http://www.google.com/search?q=redis –