اهلا جميعا،
أنا أعمل على واجهة برمجة تطبيقات ترسل عدة طلبات ، وتجمع النتائج وتجمع النتائج مع بعض المعالجة وترجع استجابة في مكان ما. أنا أستخدم عامل 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 يقوم بذلك بالفعل.
اغلاق التذكرة لعدم حدوث اي نشاط عليها منذ فترة.
التعليق الأكثر فائدة
grequests.map()
هو نسخة مختصرة من مقتطف الشفرة الذي قدمته أعلاه.بخلاف ذلك ،
grequests
لا يفعل الكثير. إنه موجود بشكل أساسي لتصحيح القرد للعملية عند استيراده ، لكن gunicorn يقوم بذلك بالفعل.