سؤال

يا. أنا أعمل على تطبيق محرك التطبيق الذي يتضمن استفسارات إلى واجهة برمجة تطبيقات خرائط Google للتشفير الجغرافي. خرائط Google لا تحب الكثير من الطلبات ، لذا أضع تأخيرًا ثانية واحدة بين كل طلب time.sleep(1).

لقد لاحظت أن حصص بلدي تعمل في لوحة معلومات GAE الخاصة بي وقررت إجراء اختبار قصير:

import cProfile
import time

def foo():
    time.sleep(3)

cProfile.run('foo()')

الذي أعطاني الإخراج التالي:

   4 function calls in 3.003 CPU seconds
   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    3.003    3.003 <stdin>:1(foo)
        1    0.000    0.000    3.003    3.003 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        1    3.003    3.003    3.003    3.003 {time.sleep}

لذلك تقول أنها تستهلك 3 ثوان من وحدة المعالجة المركزية ل time.sleep(3). الآن أتساءل عما إذا كانت مكالمات مثل هذه يتم حسابها نحو حدود الحصص التي توفرها GAE. وإذا كان الأمر كذلك ، فما هي الطريقة الأخرى لتشغيل التأخير بين API يدعو الترميز الجغرافي؟

شكرًا.

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

المحلول

أنت بالتأكيد لا تريد أن تحاول النوم في نظام تم تصميمه بالكامل من الألف إلى الياء لإنهاء الطلبات في أقصر وقت ممكن: D

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

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

نصائح أخرى

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

لماذا النوم على الإطلاق؟ في مهمتك ، قم بعمل ترميز جغرافي واحد وابحث ببساطة عن احتجاج آخر لنفسك في قائمة الانتظار في 3Secs. انظر المعلمة countdown عند الاحتجاج http://code.google.com/intl/el/appengine/docs/python/taskqueue/functions.html#add .

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

هذه القضية التقارير التي تفيد بأن المراسل لم يتم فواتيره لثواني وحدة المعالجة المركزية التي تكبدتها Time.sleep () ، ولكنها تظهر على AppStats. من المحتمل جدًا أن يستخدم appstats cprofile أيضًا. النوم مهم للأشخاص الذين يحاولون صنع وكلاء غير متزامن أفضل يمكنه استخدامه لإجراء مجموعة أكبر من العناصر الجغرافية.

http://code.google.com/p/googleappengine/issues/detail؟id=3291

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