"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मल्टीप्रोसेसिंग में शब्दकोश साझा करते समय दौड़ की स्थिति से कैसे बचें?

मल्टीप्रोसेसिंग में शब्दकोश साझा करते समय दौड़ की स्थिति से कैसे बचें?

2024-12-21 को प्रकाशित
ब्राउज़ करें:761

How to Avoid Race Conditions When Sharing Dictionaries in Multiprocessing?

मल्टीप्रोसेसिंग में साझा शब्दकोशों तक पहुंच को कैसे सिंक्रनाइज़ करें

मल्टीप्रोसेसिंग वातावरण में, कई प्रक्रियाओं को साझा डेटा तक पहुंच की आवश्यकता हो सकती है, जैसे कि शब्दकोष। हालाँकि, यदि उचित सिंक्रनाइज़ेशन तंत्र लागू नहीं किया जाता है, तो दौड़ की स्थिति उत्पन्न हो सकती है, जिससे अविश्वसनीय या दूषित डेटा हो सकता है। ऐसा प्रतीत होता है कि शब्दकोश चाइल्ड प्रक्रियाओं द्वारा संशोधित परिणामों को संग्रहीत करता है। हालाँकि, एक बार जब मुख्य प्रक्रिया Q से जुड़ जाती है, तो शब्दकोश D खाली हो जाता है।

यह समस्या मल्टीप्रोसेसिंग की अतुल्यकालिक प्रकृति से उत्पन्न होती है। प्रत्येक चाइल्ड प्रोसेस का अपना मेमोरी स्पेस होता है, और साझा वेरिएबल्स में किए गए संशोधन उचित सिंक्रनाइज़ेशन के बिना अन्य प्रक्रियाओं को तुरंत दिखाई नहीं दे सकते हैं।

सिंक्रनाइज़ेशन के लिए मैनेजर ऑब्जेक्ट का उपयोग करना

मल्टीप्रोसेसिंग में साझा डेटा तक पहुंच को सिंक्रनाइज़ करने का एक सामान्य समाधान

Manager

ऑब्जेक्ट का उपयोग करना है। एक प्रबंधक साझा मेमोरी सेगमेंट प्रदान करता है जिसे सभी भाग लेने वाली प्रक्रियाओं द्वारा एक्सेस किया जा सकता है। यहां बताया गया है कि आप प्रबंधक का उपयोग करके सिंक्रनाइज़ेशन कैसे कार्यान्वित कर सकते हैं:

मल्टीप्रोसेसिंग आयात प्रक्रिया से, प्रबंधक डीईएफ़ एफ(डी): डी[1] = '1' डी['2'] = 2 यदि __नाम__ == '__मुख्य__': प्रबंधक = प्रबंधक() डी = मैनेजर.डिक्ट() डी[1] = '1' डी['2'] = 2 p1 = प्रक्रिया(लक्ष्य=f, args=(d,)) p2 = प्रक्रिया(लक्ष्य=f, args=(d,)) p1.प्रारंभ() p2.प्रारंभ() p1.जुड़ें() p2.join() print(d)

from multiprocessing import Process, Manager

def f(d):
    d[1]  = '1'
    d['2']  = 2

if __name__ == '__main__':
    manager = Manager()

    d = manager.dict()
    d[1] = '1'
    d['2'] = 2

    p1 = Process(target=f, args=(d,))
    p2 = Process(target=f, args=(d,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    print(d)

आउटपुट:

$ Python mul.py {1: '111', '2': 6}

$ python mul.py
{1: '111', '2': 6}
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3