سؤال

هل حصل أي شخص على أي خبرة في الاستثناء التالي عند استخدام GAE URLFetch؟

      DownloadError: ApplicationError: 2 timed out

أحاول إرسال طلب وظيفة HTTP. مثل ذلك:

      result = urlfetch.fetch('http://api.nathan.com:8080/Obj/',
                              method='POST',
                              payload=postdata,
                              deadline=10)

لقد حاولت تحديد الموعد النهائي إلى الحد الأقصى (10 ثوان). يستغرق الطلب من سطر الأوامر (باستخدام Curl أو httplib2) حوالي ثانية.

       nchong@almond ~ $ time curl
                         -d "<Obj><a>1</a><b>n</b></Obj>"
                         http://api.nathan.com:8080/Obj/
       agd1c2VyYXBpcgoLEgRTZXNzGAIM      #< key returned by call
       real 0m1.109s
       user 0m0.003s
       sys  0m0.009s

إليك الإخراج من Dev Appserver لطلب حليقة (أنا أستخدم Appengine-Rest-Server):

INFO     __init__.py:819] adding models from module __main__
INFO     __init__.py:867] added model Obj with type <class '__main__.Obj'>
INFO     dev_appserver.py:3243] "POST /Obj HTTP/1.1" 200 -
INFO     dev_appserver_index.py:205] Updating /path/to/index.yaml

إليك الإخراج عندما أحاول استخدام URLFetch:

ERROR    __init__.py:388] ApplicationError: 2 timed out
Traceback (most recent call last):
  File "/path/to/webapp/__init__.py", line 507, in __call__
    handler.get(*groups)
  File "/path/to/myapp/main.py", line 62, in get
    result = urlfetch.fetch(...)
  File "/path/to/urlfetch.py", line 241, in fetch
    return rpc.get_result()
  File "/path/to/apiproxy_stub_map.py", line 501, in get_result
    return self.__get_result_hook(self)
  File "/path/to/urlfetch.py", line 325, in _get_fetch_result
    raise DownloadError(str(err))
DownloadError: ApplicationError: 2 timed out
INFO     dev_appserver.py:3243] "GET / HTTP/1.1" 500 -
INFO     dev_appserver.py:3243] "POST /Obj/ HTTP/1.1" 200 -
هل كانت مفيدة؟

المحلول

خادم ويب التنمية هو خيوط واحدة. لا يمكنك تقديم طلب من التطبيق الخاص بك يعمل داخله إلى حد ذاته. حاول تشغيل مثيلتين على منافذ مختلفة.

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

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