Werkzeug: افتراض غير صحيح في werkzeug.serving حول سلوك المقبس

تم إنشاؤها على ١ مايو ٢٠١٦  ·  6تعليقات  ·  مصدر: pallets/werkzeug

كما نعلم جميعًا ، فإن socket.send () لا يضمن إرسال جميع البيانات

وهذا الخط:
https://github.com/pallets/werkzeug/blob/03faf0569861e9d8c8c94785ad5560f735ba72da/werkzeug/serving.py#L165
جنبًا إلى جنب مع gevent وأكبر تقنية على نطاق الويب ، والمعروفة باسم docker ، قادني إلى هذا السلوك فقط مع اقتطاع الردود: 3

يبدو أن المقبس يجب أن يهتم به المقبس ، لكنه لا يفعل ذلك

التعليق الأكثر فائدة

لقد واجهت هذا الخطأ في Python 3.5 ، ولكن فقط عند ضبط المقبس الأساسي على وضع عدم الحظر (على سبيل المثال مع settimeout ). اتضح أن هذا في الواقع ناتج عن خطأ في المنبع في Python 3: issue24291 . تم إصلاح المشكلة في Python 3.6 (راجع الإصدار 26721 )

الحل البديل الذي تم تنفيذه في خوادم الويب الأخرى هو التفاف wfile في io.BufferedWriter (على سبيل المثال في wsgiref CPython في 3.5 ) أو تغيير wbufsize لتمكين التخزين المؤقت بواسطة الافتراضي (على سبيل المثال ، انظر هذه المشكلة )

لست متأكدًا مما إذا كان werkzeug يريد تنفيذ حل بديل أيضًا ، أو يعتبره مشكلة غير متعلقة بـ werkzeug.

ال 6 كومينتر

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

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

لقد واجهت هذا الخطأ في Python 3.5 ، ولكن فقط عند ضبط المقبس الأساسي على وضع عدم الحظر (على سبيل المثال مع settimeout ). اتضح أن هذا في الواقع ناتج عن خطأ في المنبع في Python 3: issue24291 . تم إصلاح المشكلة في Python 3.6 (راجع الإصدار 26721 )

الحل البديل الذي تم تنفيذه في خوادم الويب الأخرى هو التفاف wfile في io.BufferedWriter (على سبيل المثال في wsgiref CPython في 3.5 ) أو تغيير wbufsize لتمكين التخزين المؤقت بواسطة الافتراضي (على سبيل المثال ، انظر هذه المشكلة )

لست متأكدًا مما إذا كان werkzeug يريد تنفيذ حل بديل أيضًا ، أو يعتبره مشكلة غير متعلقة بـ werkzeug.

بناءً على المعلومات المقدمة ، أعتقد أن هذا بالفعل إما خطأ gevent أو stdlib bug ، يستخدم werkzeug الكتابة + flush في ملف مخزن مؤقت مفترض ، والذي بدوره يجب أن يعمل دائمًا ، الآن أتساءل عما إذا كان هذا يحدث أيضًا على بيثون عادي ، أو فقط على gevent

RonnyPfannschmidt نعم ، أحصل عليه بدون gevent أيضًا ، أحتاج فقط إلى استخدام مقبس غير مغلق مع werkzeug WSGIRequestHandler . كان Gevent مجرد مثال آخر للعديد من المشاريع التي تأثرت بشكل غير مباشر بخلل المنبع في Python 3.5 :-)

نظرًا للظروف التي يحدث فيها هذا ، بالإضافة إلى حقيقة أنه تم إصلاحه في Python 3.5 (3.4 يذهب EOL في مارس) ، فإنني أغلق هذا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

asottile picture asottile  ·  11تعليقات

Nessphoro picture Nessphoro  ·  6تعليقات

golf-player picture golf-player  ·  10تعليقات

c17r picture c17r  ·  4تعليقات

davidism picture davidism  ·  9تعليقات