मुझे मल्टीप्रोसेसिंग मॉड्यूल के साथ समस्याएं आ रही हैं। मैं कई फाइलों से डेटा लोड करने के लिए अपने मानचित्र विधि के साथ श्रमिकों का एक पूल उपयोग कर रहा हूं और उनमें से प्रत्येक के लिए मैं एक कस्टम फ़ंक्शन के साथ डेटा का विश्लेषण करता हूं। प्रत्येक बार जब एक फाइल संसाधित की जाती है, तो मैं एक काउंटर अपडेट करना चाहता हूं ताकि मैं ट्रैक कर सकूं कि कितनी फाइलें संसाधित की जा रही हैं।पायथन मल्टीप्रोसेसिंग और एक साझा काउंटर
def analyze_data(args):
# do something
counter += 1
print counter
if __name__ == '__main__':
list_of_files = os.listdir(some_directory)
global counter
counter = 0
p = Pool()
p.map(analyze_data, list_of_files)
मैं इस के लिए एक समाधान नहीं मिल सकता है: यहाँ नमूना कोड है।
महान उत्तर! मुझे आयरनपीथन में एक ही समस्या थी, और मल्टीप्रोसेसिंग के दौरान। वैल्यू उपलब्ध नहीं है आप क्लियर के साथ कुछ ऐसा कर सकते हैं। संदर्भ और सिस्टम। थ्रेडिंग। इन्टरलाक्ड: http://stackoverflow.com/questions/2255461/how-to-atomically- increment-a-static-member-in-ironpython/2314858 # 2314858 –
@jkp, वैश्विक चर के बिना आप इसे कैसे करेंगे? - मैं एक वर्ग का उपयोग करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि यह उतना आसान नहीं है। Http://stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when-using-pythons-multiprocessing-pool-ma – Anna
दुर्भाग्यवश, यह उदाहरण त्रुटिपूर्ण प्रतीत होता है, क्योंकि 'counter.value + = 1 'प्रक्रियाओं के बीच परमाणु नहीं है, इसलिए कुछ प्रक्रियाओं के साथ लंबे समय तक चलने पर मान गलत होगा –