لماذا يعمل Python المتوازي بالطريقة التي تعمل بها؟
-
28-09-2019 - |
سؤال
في بيثون الموازي ، لماذا من الضروري لف أي وحدات ستحتاج الوظيفة التي تم تمريرها إلى جانب المتغيرات ومساحات الأسماء في مكالمة تقديم الوظيفة هذه - ما مدى ضرورة الحفاظ على متغيرات "مستوى الوحدة"؟ (إذا كان هذا كل ما يحدث)
إرسال الوظيفة:
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
هو كابوس.