ฉันมีแอป UWSGI อย่างง่ายที่วางอยู่เบื้องหลัง LB ด้วยการกำหนดค่า .ini ต่อไปนี้
[uwsgi]
ซ็อกเก็ต=0.0.0.0:5071
chdir = src/
ไฟล์ wsgi = uwsgi.py
กระบวนการ = 2
เธรด = 1
โปรโตคอล = http
ปลั๊กอิน = หลาม
exit-on-reload=เท็จ
มาสเตอร์=จริง
# การล้างไฟล์ temp
สุญญากาศ = จริง
เมื่อทั้งหมด 2x1
เธรดไม่ว่างแอปพลิเคชัน ให้บริการต่อไป การเชื่อมต่อเข้ามาโดยการเข้าคิวรอให้เธรดว่าง
นี่เป็นพฤติกรรมที่ไม่พึงประสงค์ในกรณีของฉัน เนื่องจากฉันต้องการให้ UWSGI ส่งคืนรหัสสถานะ 5xx ซึ่งจะทำให้ฉันไม่ใช้ทรัพยากรมากเกินไปในการแจกจ่ายครั้งเดียว
รหัสการทดสอบไคลเอนต์
การแนบรหัสไคลเอนต์ทดสอบสำหรับแอปพลิเคชัน UWSGI
พร็อกซี่ = {
'http':'http://localhost:5071'
}
@เธรด
def f():
พิมพ์ ('ส่งคำขอ')
ตอบกลับ = request.get('http://dummy.site',พร็อกซี=พร็อกซี)
พิมพ์(str(response.status_code )+ response.text)
สำหรับผมในช่วง (5):
ฉ()
แบบทดสอบ (1)
การเพิ่ม ฟัง = 2
เป็น .ini และเริ่มทำงาน 3 คำขอพร้อมกันก็จะพิมพ์:
*** คิวฟัง uWSGI ของ socket "0.0.0.0:5071" (fd: 3) เต็ม !!! (3/2) ***
ในขณะที่การเชื่อมต่อที่สามดูเหมือนจะยังคงได้รับการยอมรับ เข้าคิวและดำเนินการในภายหลังแทน a 5xx
เกิดข้อผิดพลาด
การทดสอบ (2)
การเพิ่ม ฟัง = 0
เป็น .ini และเริ่มทำงาน 5 คำขอพร้อมกัน จะดำเนินการเพียงสองคำขอในแต่ละครั้ง เอาต์พุตคิวเต็มไม่แสดงอีกต่อไป ยังไงก็ตาม คำขอนั้นยังคงอยู่ในคิวและดำเนินการเมื่อเธรดว่าง
ฉันจะบล็อกการเชื่อมต่อขาเข้ากับแอปพลิเคชัน UWSGI ได้อย่างไรเมื่อเธรดทั้งหมดไม่ว่าง