سؤال

في بيثون الموازي ، لماذا من الضروري لف أي وحدات ستحتاج الوظيفة التي تم تمريرها إلى جانب المتغيرات ومساحات الأسماء في مكالمة تقديم الوظيفة هذه - ما مدى ضرورة الحفاظ على متغيرات "مستوى الوحدة"؟ (إذا كان هذا كل ما يحدث)

إرسال الوظيفة:

submit(self, func, args=(), depfuncs=(), modules=(), callback=None, callbackargs=(),group='default', globals=None)
    Submits function to the execution queue

    func - function to be executed
    args - tuple with arguments of the 'func'
    depfuncs - tuple with functions which might be called from 'func'
    modules - tuple with module names to import
    callback - callback function which will be called with argument 
        list equal to callbackargs+(result,) 
        as soon as calculation is done
    callbackargs - additional arguments for callback function
    group - job group, is used when wait(group) is called to wait for
    jobs in a given group to finish
    globals - dictionary from which all modules, functions and classes
    will be imported, for instance: globals=globals()
هل كانت مفيدة؟

المحلول

السبب في أن pp يعمل بالطريقة التي تعمل بها ، وهي أنها تصنع مثيلًا جديدًا لمترجم بيثون لكل عامل ، وهو مستقل تمامًا عن أي شيء تم تشغيله قبل أو منذ ذلك الحين. هذا يضمن عدم وجود آثار جانبية غير مقصودة ، مثل __future__ الواردات النشطة في عملية العمال. المشكلة في ذلك هي أنها تجعل الأمور أكثر تعقيدًا للتصحيح ، وفي تجربتي مع pp, ، ليست قوية بشكل خاص. pp يفعل حاول أن تجعل الأمور أسهل بعض الشيء على المستخدم ، ولكن يبدو أنها تقدم مشاكل أكثر مما يحل في جهوده للقيام بذلك.

إذا كنت سأكتب رمزًا تم تصميمه للاستخدام على مجموعة من البداية ، فمن المحتمل أن ينتهي بنا المطاف باستخدام pp, ، لكنني وجدت أن تكييف التعليمات البرمجية الحالية للعمل معها pp هو كابوس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top