Celery: هل يمكن لعمليات العمال الجاهزة تجاهل إشارات TERM؟

تم إنشاؤها على ٤ يونيو ٢٠١٨  ·  3تعليقات  ·  مصدر: celery/celery

عام

الإصدار المتأثر: الأحدث (4.1.1)

سلوك متوقع

يتجاهل العمال المشغولون مسبقًا إشارة sigterm - العملية الأبوية الوحيدة المسؤولة عن الإغلاق الدافئ تتفاعل معها وتغلق العمليات الفرعية برشاقة.

السلوك الحالي

عندما تحصل عمليات العمال مسبقة التشغيل على نموذج ، يتم إغلاقها على الفور (على سبيل المثال kill <pid> ):

celery_1        | [2018-06-04 09:19:57,376: ERROR/MainProcess] Process 'ForkPoolWorker-2' pid:26 exited with 'signal 15 (SIGTERM)'

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

ملاءمة

لا يمكنني العثور على طريقة للقيام بإغلاق مناسب للكرفس في حاوية عامل إرساء بنظام init.
(راجع القائمة البريدية: https://groups.google.com/forum/#!topic/celery-users/9UF_VyzRt8Q). يبدو أنني يجب أن أتأكد من أن مصطلح الإشارة يصل فقط إلى العملية الأم ، ولكن ليس أيًا من العمال الذين تم عملهم مسبقًا. يبدو أن هذا صعب للغاية عند تشغيل نص برمجي يحتوي على العديد من حالات الكرفس (على سبيل المثال ، إيقاع وقائمتان)

حل ممكن

هل من الممكن إضافة ميزة تسمح لعمليات العمال الجاهزة بتجاهل النموذج؟

Deployment Prefork Workers Pool

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

شكرًا georgepsarakis و xirdneh على اقتراحاتكم المفيدة. تمكنت من الحصول على إعداد عمل مع مشرف! 🎉
وجود عامل واحد لكل حاوية هو اقتراح جيد جدًا أيضًا! شكرا جزيلا!

ال 3 كومينتر

من أجل الحصول على انتشار مناسب للإشارة عند بدء عمليات متعددة داخل حاوية Docker ، ربما تحتاج إلى مدير عملية مثل المشرف .

لمزيد من المعلومات ، إليك نظرة عامة حول كيفية قيام عامل التحميل بإيقاف الأشياء: https://www.ctl.io/developers/blog/post/gracefully-stopping-docker-containers/#docker -stop

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

شيء أخير. إذا كنت تريد حقًا تشغيل برنامج bash الخاص بك لإدارة العديد من العمال ، فسيتعين عليك إقالة كل عامل ثم النوم إلى أجل غير مسمى حتى يأتي SIGTERM .
عندما يحدث ذلك ، يمكنك الذهاب والحصول على PID للعمال ثم إيقاف كل واحد برشاقة.
وهو ما يفعله المشرف كما أشار georgepsarakis .

شكرًا georgepsarakis و xirdneh على اقتراحاتكم المفيدة. تمكنت من الحصول على إعداد عمل مع مشرف! 🎉
وجود عامل واحد لكل حاوية هو اقتراح جيد جدًا أيضًا! شكرا جزيلا!

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