"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية مشاركة الأقفال بين عمليات بايثون

كيفية مشاركة الأقفال بين عمليات بايثون

تم النشر بتاريخ 2024-11-08
تصفح:689

How to Share Locks Between Python Processes

مشاركة الأقفال بين عمليات بايثون

عند محاولة استخدام قفل بين عمليات متعددة، قد تواجه الخطأ، "يجب قفل الكائنات فقط يمكن مشاركتها بين العمليات من خلال الميراث."

لحل هذه المشكلة، هناك طريقتان رئيسيتان:

استخدام مدير

يتضمن هذا الأسلوب إنشاء كائن المدير وتمرير 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,))

هذه الطريقة تجعل مثيل القفل عامًا في جميع العمال الفرعيين. لاحظ أن هذا الأسلوب يلغي الحاجة إلى الوظيفة الجزئية.

من خلال استخدام إحدى هذه التقنيات، يمكنك مشاركة الأقفال بشكل فعال بين عمليات بايثون، مما يسمح بالوصول المنسق إلى الموارد المشتركة.

بيان الافراج يتم استنساخ هذه المقالة في: 1729132333 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3