سؤال

أنا أتطلع إلى كتابة الخفي:

  • يقرأ رسالة من قائمة انتظار (SQS، Rabbit-MQ، أيا كان ...) تحتوي على مسار إلى ملف مضغوط
  • تحديثات سجل في قاعدة البيانات تقول شيئا مثل "هذه المهمة هي معالجة"
  • يقرأ محتويات الأرشيف المذكورة أعلاه وإدراج صف في قاعدة بيانات W / معلومات تم إعدامها من بيانات ملف تعريف الملفات لكل ملف
  • تكرار كل ملف إلى S3
  • حذف ملف zip
  • يمثل الوظيفة باعتبارها "كاملة"
  • قراءة الرسالة التالية في قائمة الانتظار، كرر

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

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

كيف حل الناس هذا في الماضي؟ ما هي بعض الأساليب الأخرى التي يمكن أن تأخذها؟

شكرا مقدما على أي مساعدة ومناقشة!

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

المحلول 3

اخترت استخدام مزيج من الكرفس (http://ask.github.com/celery/introduction.html.)، Rabbitmq، وجهة نظر Django بسيطة للتعامل مع التحميلات. سير العمل يبدو وكأنه هذا:

  1. عرض Django قبول، محلات تحميل
  2. الكرفس Task يتم إرسالها لمعالجة التحميل. يتم كل العمل داخل Task.

نصائح أخرى

لقد استخدمت Beanstalkd. كخفي في انتظار تأثير جيد للغاية (بعض المعالجة القريبة وتغيير حجم الصورة - أكثر من 2 مليون حتى الآن في الأسابيع القليلة الماضية). قم بإلقاء رسالة في قائمة الانتظار باستخدام اسم ملف zip (ربما من دليل معين) [i Serialise A Command and Parameters في JSON]، وعند حجز الرسالة في عميل العميل الخاص بك، لا يمكن لأي شخص آخر الحصول عليه، إلا إذا سمحت بذلك في الوقت المناسب (عندما تعود إلى قائمة الانتظار ليتم التقاطها).

الباقي هو إلغاء تحديد وتحميلها إلى S3، والتي توجد بها مكتبات أخرى.

إذا كنت ترغب في التعامل مع العديد من ملفات ZIP في وقت واحد، قم بتشغيل العديد من عمليات العامل كما تريد.

وأود أن أتجنب القيام بأي شيء متعدد الخيوط وبدلا من ذلك استخدام قائمة الانتظار وقاعدة البيانات لمزامنة أكبر عدد ممكن من العمليات أثناء الرعاية للبدء.

بالنسبة لهذا التطبيق، أعتقد أن الملتوية أو أي إطار لإنشاء تطبيقات الخادم ستكون مبالغة.

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

إضافة بعض التسجيل، ربما جرب / ما عدا كتلة لإرسال البريد الإلكتروني إليك.

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