كيفية مزامنة الوصول إلى القواميس المشتركة في المعالجة المتعددة
في بيئة متعددة المعالجة، قد تتطلب العمليات المتعددة الوصول إلى البيانات المشتركة، مثل قاموس. ومع ذلك، إذا لم يتم تنفيذ آليات المزامنة المناسبة، يمكن أن تحدث حالات سباق، مما يؤدي إلى بيانات غير موثوقة أو تالفة.
ضع في اعتبارك سيناريو حيث تصل عمليات فرعية متعددة إلى القاموس العام D أثناء العمل في قائمة انتظار مشتركة س. في البداية، يبدو أن القاموس يقوم بتخزين النتائج المعدلة بواسطة العمليات الفرعية. ومع ذلك، بمجرد انضمام العملية الرئيسية إلى Q، يصبح القاموس D فارغًا.
تنبع هذه المشكلة من الطبيعة غير المتزامنة للمعالجة المتعددة. كل عملية فرعية لها مساحة ذاكرة خاصة بها، وقد لا تكون التعديلات التي يتم إجراؤها على المتغيرات المشتركة مرئية على الفور للعمليات الأخرى دون المزامنة المناسبة.
استخدام كائن مدير للمزامنة
الحل الشائع لمزامنة الوصول إلى البيانات المشتركة في المعالجة المتعددة هو استخدام كائن Manager. يوفر المدير شرائح الذاكرة المشتركة التي يمكن الوصول إليها من خلال جميع العمليات المشاركة.
إليك كيفية تنفيذ المزامنة باستخدام المدير:
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)
في هذا المثال، يقوم كائن Manager بإنشاء قاموس مشترك d، والذي يمكن الوصول إليه من خلال كلتا العمليتين الفرعيتين. عندما تقوم عملية فرعية بتعديل القاموس، تكون التغييرات مرئية على الفور للعمليات الأخرى.
الإخراج:
$ python mul.py {1: '111', '2': 6}$ python mul.py {1: '111', '2': 6}يوضح هذا الإخراج أنه تمت مزامنة القاموس المشترك وتحديثه بنجاح بواسطة العمليات الفرعية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3