Gunicorn: سؤال حول عملية ملزمة IO مع العمال الجاد

تم إنشاؤها على ١٥ أبريل ٢٠١٩  ·  3تعليقات  ·  مصدر: benoitc/gunicorn

اهلا جميعا،

أنا أعمل على واجهة برمجة تطبيقات ترسل عدة طلبات ، وتجمع النتائج وتجمع النتائج مع بعض المعالجة وترجع استجابة في مكان ما. أنا أستخدم عامل Greenlet لأن العملية من الواضح أن IO Bound.

من خلال ما قرأته ، فإن كل Greenlet الذي يتعامل مع طلبات gunicorn سيكون بمثابة مؤشر ترابط ، لذلك عندما تضطر مكالمة حظر IO إلى انتظار IO ، فإن greenlet سوف يحظر طلبات gunicorn المعينة. على سبيل المثال ، في المعالج ، تطبيقي (باستخدام flask راجع للشغل) ، لدي عدة requests.get(...) سيتم حظر Greenlet حتى requests.get()

def fetch(pid):
    response0 = requests.get('http://some-micro-service-0.com/')
    response1 = requests.get('http://some-micro-service-1.com/')
    response2 = requests.get('http://some-micro-service-2.com/')
    return combine_response(response0, response1, response2)

يمكنني استخدام grequests لمحاولة إضافة المزيد من التزامن إلى المعالج ، لتحسين زمن الانتقال (وهو شيء أبحث عنه). لكن هل لديك أي اقتراح حول كيفية القيام بذلك؟

هل لديك أي اقتراحات حول كيفية القيام بجمع عدة طلبات؟

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

يمكنني استخدام grequests لمحاولة إضافة المزيد من التزامن إلى المعالج ،

grequests.map() هو نسخة مختصرة من مقتطف الشفرة الذي قدمته أعلاه.

بخلاف ذلك ، grequests لا يفعل الكثير. إنه موجود بشكل أساسي لتصحيح القرد للعملية عند استيراده ، لكن gunicorn يقوم بذلك بالفعل.

ال 3 كومينتر

لدى gevent

(ستكون حالتك مختلفة قليلاً ، يمكنك إرجاع response بدلاً من طباعتها ثم دمجها.)

لكن يمكننا في الواقع أن نذهب بشكل أبسط باستخدام واجهة برمجة تطبيقات Group.map :

from gevent import pool

jobs = pool.Group()
responses = jobs.map(requests.get, 
                     ('http://one', 'http://two', 'http://three'))

يمكنني استخدام grequests لمحاولة إضافة المزيد من التزامن إلى المعالج ،

grequests.map() هو نسخة مختصرة من مقتطف الشفرة الذي قدمته أعلاه.

بخلاف ذلك ، grequests لا يفعل الكثير. إنه موجود بشكل أساسي لتصحيح القرد للعملية عند استيراده ، لكن gunicorn يقوم بذلك بالفعل.

اغلاق التذكرة لعدم حدوث اي نشاط عليها منذ فترة.

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