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

كيفية مشاركة القفل بين العمليات في بايثون باستخدام المعالجة المتعددة

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

How to Share a Lock Between Processes in Python Using Multiprocessing

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

عند محاولة استخدامpool.map() لاستهداف وظيفة ذات معلمات متعددة، بما في ذلك كائن Lock()، يكون الأمر كذلك حاسم لمعالجة مشكلة مشاركة القفل بين العمليات الفرعية. لا يمكن تمرير المعالجة المتعددة التقليدية.Lock() مباشرة إلى أساليب التجمع بسبب قيود التخليل.

الخيار 1: استخدام المدير والمدير.Lock()

أحد الأساليب هو استخدام Manager() وإنشاء مثيل Manager.Lock(). على الرغم من أن هذه الطريقة يمكن الاعتماد عليها، إلا أنها تتضمن المزيد من الحمل بسبب العملية الإضافية التي تستضيف خادم المدير. بالإضافة إلى ذلك، تتطلب عمليات القفل الاتصال بهذا الخادم عبر IPC.

الخيار 2: تمرير القفل عند إنشاء التجمع باستخدام المُهيئ

بدلاً من ذلك، يمكنك تمرير المعالجة المتعددة العادية.Lock() أثناء تهيئة المجمع باستخدام وسيطة الكلمة الأساسية للتهيئة. وهذا يضمن أن يكون مثيل القفل عالميًا في جميع الأطفال العاملين. تلغي هذه الطريقة ضرورة الوظائف الجزئية وتبسط العملية.

إليك مثال لاستخدام الخيار 2:

def target(iterable_item):
    for item in items:
        # Do cool stuff
        if (... some condition here ...):
            lock.acquire()
            # Write to stdout or logfile, etc.
            lock.release()

def init(l):
    global lock
    lock = l

def main():
    iterable = [1, 2, 3, 4, 5]
    l = multiprocessing.Lock()
    pool = multiprocessing.Pool(initializer=init, initargs=(l,))
    pool.map(target, iterable)
    pool.close()
    pool.join()
بيان الافراج أعيد طبع هذه المقالة على: 1729132755 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3