Tôi đang cố gắng xây dựng một máy chủ web python bằng Django và Waitress, nhưng tôi muốn biết Waitress xử lý các yêu cầu đồng thời như thế nào và khi nào việc chặn có thể xảy ra.
Mặc dù tài liệu Waitress đề cập rằng có nhiều luồng công nhân có sẵn, nhưng nó không cung cấp nhiều thông tin về cách chúng được thực hiện và cách con trăn GIL ảnh hưởng đến chúng (nhấn mạnh vào chính tôi):
Khi một kênh xác định máy khách đã gửi ít nhất một yêu cầu HTTP hợp lệ đầy đủ, nó sẽ lên lịch cho một "tác vụ" với "bộ điều phối luồng". Bộ điều phối luồng duy trì một nhóm các luồng công nhân cố định có sẵn để thực hiện công việc của máy khách (theo mặc định, 4 luồng). Nếu một luồng công nhân có sẵn khi một tác vụ được lên lịch, thì luồng công nhân sẽ chạy tác vụ đó. Tác vụ có quyền truy cập vào kênh và có thể ghi lại vào bộ đệm đầu ra của kênh. Khi tất cả các luồng công nhân đang được sử dụng , các tác vụ theo lịch trình sẽ chờ trong hàng đợi để một luồng công nhân có sẵn.
Dường như không có nhiều thông tin về Stackoverflow. Từ câu hỏi "Công nhân không đồng bộ gthread của Gunicorn có giống với Waitress không?" :
Waitress có một luồng async chính để đệm các yêu cầu và liệt kê từng yêu cầu tới một trong các luồng worker worker của nó khi I / O yêu cầu kết thúc.
Những tuyên bố này không đề cập đến GIL (ít nhất là theo sự hiểu biết của tôi) và thật tuyệt nếu ai đó có thể giải thích nhiều hơn về cách các chủ đề công nhân làm việc cho Waitress. Cảm ơn!