سؤال

في الموازية بيثون لديها شيء في إرسال وظيفة تسمى أ أتصل مرة أخرى (توثيقومع ذلك يبدو أنه لا يبدو أن يفسر ذلك جيدا. لقد نشرت في منتدىهم قبل بضعة أيام ولم أتلق استجابة. هل يفسر شخص ما اسم رد الاتصال وما هو يستخدمه؟

شكرا لك.

هل كانت مفيدة؟

المحلول

رد الاتصال هي وظيفة مقدمة من قبل المستهلك ل API أن API يمكن أن يستدير ثم استدعاء (اتصل عليك مرة أخرى). إذا قمت بإعداد موعد الدكتور، يمكنني منحها رقم هاتفي، حتى يتمكنوا من الاتصال بي في اليوم السابق لتأكيد التعيين. رد اتصال مثل هذا، باستثناء بدلا من مجرد كونه رقم هاتف، يمكن أن يكون تعليمات تعسفية مثل "أرسل لي رسالة بريد إلكتروني في هذا العنوان، وأيضا اتصل بسكرتي وأضعها في التقويم الخاص بي.

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

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

في هذه الحالة المحددة، ستغسل وظيفة تقديم Python الموازية رد الاتصال الخاص بك مع أي حجج ترضيك ونتيجة func, ، بمجرد func انتهى من التنفيذ.

نصائح أخرى

البقعة ذات الصلة في المستندات:

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

لذلك، إذا كنت ترغب في تنفيذ بعض التعليمات البرمجية بمجرد أن تكون النتيجة جاهزة، فإنك تضع هذا التعليمات البرمجية في وظيفة وتمرير هذه الوظيفة ك callback جدال. إذا كنت لا تحتاج إلى حجج أخرى، فستكون فقط، على سبيل المثال:

def itsdone(result):
  print "Done! result=%r" % (result,)
...
submit(..., callback=itsdone)

لأكثر من ذلك callback نمط في بيثون، انظر مثل عرضي هنا.

النظر إلى الرابط، فقط يشبه خطاف يسمى.

رد الاتصال - وظيفة رد الاتصال التي سيتم استدعاؤها مع قائمة الوساطة مساوية للاتصال + النتيجة، بمجرد الانتهاء من الحساب

"بمجرد انتهاء الحساب" يبدو غامضا. النقطة، بقدر ما أستطيع أن أرى من هذا الشيء هو أن submit() توزع المكالمة العمل على خوادم أخرى ثم إرجاع. نظرا لأن الانتهاء غير متزامن، فقم بالكتلة، فإنه يسمح لك بتوفير وظيفة يتم استدعاؤها عند انتهاء بعض وحدة العمل. اذا فعلت:

submit( ..., callback=work_finished, ... )

ثم إرسال سوف تأكد work_finished() يسمى عند اكتمال وحدة العمل الموزعة على الخادم المستهدف.

عندما تتصل submit() يمكنك تقديم أتصل مرة أخرى الذي يسمى في نفس وقت تشغيل المتصل submit() ... وتسمى بعد توزيع وظيفة عبء العمل كاملة.

نوع من مثل "مكالمة فو (س، ص) عندما كنت قد قمت ببعض الأشياء في إرسال ()"

لكن نعم، يمكن أن تكون الوثائق أفضل. هل لديك أهدأ في مصدر PPEPYTHON وترى عند أي نقطة يتم استدعاء الاتصال submit()

أ أتصل مرة أخرى هي وظيفة تحددها لاحقا والتي تم استدعاها بواسطة وظيفة تدعوها.

كمثال، فكر في كيفية عمل AJAX: تكتب التعليمات البرمجية التي تستدعي وظيفة خادم الخلفية. في مرحلة ما في المستقبل، تعود من هذه الوظيفة ("A" ("أ" على غير متزامن، وهذا ما هو عليه "الموازي" في "Python الموازي" هو كل شيء). الآن - نظرا لأن التعليمات البرمجية يدعو التعليمات البرمجية الموجودة على الخادم، فأنت تريد أن تخبرك عندما يتم ذلك، وتريد أن تفعل شيئا بنتائجها. يفعل ذلك عن طريق الاتصال بك وظيفة رد الاتصال.

عند اكتمال الوظيفة المسماة، الطريقة القياسية لذلك لإخبارك أنه قد تم ذلك هو أن تخبره بالاتصال بدالة في التعليمات البرمجية الخاصة بك. هذا هو وظيفة رد الاتصال، وظيفتها هي التعامل مع النتائج / الإخراج من وظيفة المستوى الأدنى الذي اتصلت به.

رد الاتصال ببساطة وظيفة. في Python، تعد الوظائف المزيد من الكائنات، وبالتالي يمكن استخدام اسم الوظيفة كمتغير، مثل ذلك:

def func():
    ...

something(func)

لاحظ أن العديد من الوظائف التي تقبل رد اتصال كوسيطة تتطلب عادة أن رد الاتصال تقبل بعض الحجج. في هذه الحالة، ستحتاج وظيفة رد الاتصال إلى قبول قائمة الحجج المحددة في CallBackargs. أنا لست على دراية بيثون بالتوازي لذلك لا أعرف بالضبط ما يريده.

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