مشاركة الأقفال بين عمليات بايثون
عند محاولة استخدام قفل بين عمليات متعددة، قد تواجه الخطأ، "يجب قفل الكائنات فقط يمكن مشاركتها بين العمليات من خلال الميراث."
لحل هذه المشكلة، هناك طريقتان رئيسيتان:
استخدام مدير
يتضمن هذا الأسلوب إنشاء كائن المدير وتمرير Manager.Lock():
from multiprocessing import Manager ... m = Manager() l = m.Lock()
يؤدي استخدام المدير إلى الحاجة إلى عملية إضافية لاستضافة خادم المدير والتواصل من خلال IPC.
تمرير القفل في المجمع إنشاء
هناك طريقة بديلة تتمثل في تمرير المعالجة المتعددة العادية.Lock() في وقت إنشاء التجمع باستخدام وسيطة الكلمة الأساسية للمهيئ:
def init(l): global lock lock = l l = multiprocessing.Lock() pool = multiprocessing.Pool(initializer=init, initargs=(l,))
هذه الطريقة تجعل مثيل القفل عامًا في جميع العمال الفرعيين. لاحظ أن هذا الأسلوب يلغي الحاجة إلى الوظيفة الجزئية.
من خلال استخدام إحدى هذه التقنيات، يمكنك مشاركة الأقفال بشكل فعال بين عمليات بايثون، مما يسمح بالوصول المنسق إلى الموارد المشتركة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3