m2wsgi là một mô-đun Python cung cấp một handler cổng WSGI cho các máy chủ web Mongrel2, cho phép dễ dàng triển khai các ứng dụng Python trên Mongrel2 & nbsp;. Bạn cũng có thể tìm các lớp học hỗ trợ của nó hữu ích cho việc phát triển bộ xử lý không WSGI trong Python.
Sử dụng dòng lệnh
Cách đơn giản nhất để sử dụng gói này là như một phóng dòng lệnh:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Điều này sẽ kết nối với Mongrel2 trên cổng yêu cầu quy định và bắt đầu xử lý các yêu cầu của chúng đi qua các ứng dụng WSGI quy định. Theo mặc định, bạn sẽ có được một xử lý tất cả các yêu cầu sợi nhân viên duy nhất; tăng số lượng các chủ đề như vậy:
python -m m2wsgi --num-đề = 5 dotted.app.name tcp: //127.0.0.1: 9999
Hoặc nếu đề không phải là điều của bạn, sử dụng eventlet shuffle các bit xung quanh như vậy:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Tôi muốn thêm hỗ trợ cho các module khác IO như gevent; đóng góp hoan nghênh.
Cách sử dụng chương trình đối
Nếu bạn có nhu cầu phức tạp hơn, bạn có thể sử dụng m2wsgi từ bên trong ứng dụng của bạn. Các lớp học chính là 'WSGIHandler' mà cung cấp một giao diện máy chủ đơn giản. Tương đương với việc sử dụng trên dòng lệnh là:
từ m2wsgi.base WSGIHandler nhập khẩu
handler = WSGIHandler (my_wsgi_app, "tcp: //127.0.0.1: 9999")
handler.serve ()
Để kiểm soát tốt hơn các kết nối giữa xử lý và Mongrel2 của bạn, tạo đối tượng kết nối của riêng bạn:
từ m2wsgi.base WSGIHandler nhập khẩu, kết nối
conn = Connection (send_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; recv_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; send_ident = "9a5eee79-dbd5-4f33-8fd0-69b304c6035a")
handler = WSGIHandler (my_wsgi_app, conn)
handler.serve ()
Không phải chúng ta đã có một trong những?
Một số thực:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Không ai trong số họ đáp ứng đầy đủ nhu cầu của tôi. Đặc biệt, gói này có hỗ trợ trong suốt cho:
& Nbsp; * mã hóa phản ứng chửi rủa
& Nbsp; * "upload async" của cơ quan yêu cầu lớn
& Nbsp; * pluggable backends IO (ví dụ eventlet, gevent)
Nó còn được thiết kế từ mặt đất lên cụ thể cho Mongrel2. Điều này có nghĩa là nó được rất nhiều chức năng miễn phí và mã đơn giản và nhẹ như một kết quả.
Ví dụ, không có quản lý rõ ràng của một threadpool và yêu cầu xếp hàng như bạn có thể thấy trong ví dụ các máy chủ CherryPy. Thay vào đó, bạn chỉ cần bắt đầu lên như nhiều chủ đề như bạn cần, có tất cả các kết nối với ổ cắm xử lý giống nhau, và mongrel2 (qua zmq) sẽ tự động tải cân đối các yêu cầu đối với họ.
Tương tự như vậy, không có hỗ trợ rõ ràng cho tải lại khi thay đổi mã. Chỉ cần giết xử lý cũ và bắt đầu một cái mới. Nếu bạn đang sử dụng UUIDs xử lý cố định sau đó zmq sẽ đảm bảo rằng việc bàn giao sẽ xảy ra một cách duyên dáng
Yêu cầu .
- Python
Hạn chế :
- Khi chạy nhiều chủ đề, ctrl-C không sạch thoát khỏi quá trình này. Có vẻ như các chủ đề nền bị kẹt trong một recv chặn ().
- Các thuật toán cân bằng tải zmq là tham lam round-robin, đó không phải là lý tưởng. Ví dụ, nó có thể lên lịch cho một số các chủ đề tương tự như một chậm yêu cầu nhanh chóng, làm cho họ chờ đợi ngay cả khi chủ đề khác trở nên có sẵn. Tôi đang làm việc trên một adapter zmq rằng có thể làm điều gì đó tốt hơn.
Bình luận không