2013-08-30 55 views
10

Tôi đã triển khai một máy chủ web đa luồng bằng cách sử dụng khung công tác Flask vi mô. Về cơ bản, máy chủ của tôi có một hàng đợi công việc và một nhóm luồng. Do đó, nó có thể xử lý nhiều yêu cầu. Kể từ khi Flask được thực hiện trong Python và Python chủ đề không thực sự đồng thời, ứng dụng web của tôi là một chút laggy.Lựa chọn thay thế Flask để đạt được đa luồng thực sự?

Có bất kỳ giải pháp thay thế nào để Flask khắc phục sự cố đa luồng không?

+1

Bạn đang triển khai Flask theo cách nào? Nó sẽ không quá nhiều trên Flask. –

+1

Hãy nhớ rằng đa luồng trong Python có thể rất phù hợp với những gì bạn đang cố gắng làm. Các phần "lag" của chế độ xem của bạn có thể là những thứ như dịch vụ web hoặc cuộc gọi cơ sở dữ liệu hoặc máy chủ web được thiết lập không đúng cách đang tạo quy trình Python cho mỗi yêu cầu. Dù vấn đề thực sự là gì, chúng tôi không biết nó là gì để giúp bạn giải quyết nó với các chi tiết bạn đã đưa ra. Hơn nữa, yêu cầu một thay thế cho Flask về cơ bản là yêu cầu cho một khuyến nghị cho một công cụ, mà không phải là một câu hỏi mà StackOverflow được thiết kế để xử lý do nhiều câu trả lời có thể. –

+0

Như bạn đã đề cập, tôi đang tạo một quy trình cho mỗi yêu cầu. Nhưng tôi không thể tránh nó bởi vì, dịch vụ web đang phơi bày một hệ thống chuyển văn bản thành giọng nói (TTS) được triển khai dưới dạng một nhị phân riêng biệt. Để tương tác với quá trình TTS, tôi đang sử dụng mô-đun pexpect. Vì vậy, theo yêu cầu, một thread miễn phí hiện có từ thread pool sẽ sinh ra quá trình TTS bằng cách sử dụng pexpect. Tôi biết thiết kế hơi lạ. Đây là liên kết để thực hiện hiện tại http://sitspeech.iitkgp.ac.in/. Tôi đánh giá cao bất kỳ đề xuất nào để cải thiện thiết kế hiện tại. – user2586432

Trả lời

7

Đây không phải lỗi của Flask, nó là một hạn chế trong trình thông dịch Python, vì vậy mọi khung công tác mà bạn sử dụng sẽ phải tuân thủ.

Nhưng có một cách tuyệt vời để tránh sự cố này. Để có sự đồng nhất thực sự, bạn có thể sử dụng một nhóm các quá trình thay vì các luồng. Mô-đun multiprocessing cung cấp một API tương thích với mô-đun luồng, nhưng nó tạo ra các tiến trình con cho người lao động. Tôi đã sử dụng mô-đun này để tạo công nhân nền cho các ứng dụng Flask và được tìm thấy hoạt động rất tốt.

22

Tôi đã xem qua câu hỏi này và tôi hơi thất vọng một chút đã chỉ ra cách bình (và hầu hết các ứng dụng web python là có nghĩa là sẽ được triển khai). Xem: http://flask.pocoo.org/docs/deploying/#deployment

tùy chọn triển khai ưa thích của tôi là siêu đơn giản Tornado mà làm việc tốt như nhau trên Linux Windows (nếu tôi triển khai nó cùng với các trang web hiện có, hoặc thậm chí là một triển khai lai như một phần của trang web hiện có, tôi thường sử dụng IIS Application Request Routing [ARR] như là một Proxy ngược đến Tornado). Tôi cũng đã sử dụng gevent trên cả hai với thành công lớn.

Tornado là phiên bản mã nguồn mở của máy chủ web có thể mở rộng, không chặn và các công cụ hỗ trợ FriendFeed. Bởi vì nó không bị chặn và sử dụng epoll, nó có thể xử lý hàng nghìn kết nối đứng đồng thời, có nghĩa là nó là lý tưởng cho các dịch vụ web thời gian thực. Lồng ghép dịch vụ này với Flask là đơn giản:

Vì vậy, nếu ứng dụng của bạn là bình trong yourapplication.py, bạn có thể tạo khác được gọi tornado_web.py và sử dụng nó để phục vụ cho ứng dụng của bạn như sau:

from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from yourapplication import app 

http_server = HTTPServer(WSGIContainer(app)) 
http_server.listen(5000) 
IOLoop.instance().start() 

via: http://flask.pocoo.org/docs/deploying/wsgi-standalone/#tornado

+0

Tôi vừa cài đặt lốc xoáy trên ứng dụng của tôi (nhìn chằm chằm về phía trước như đã nói), nhưng im mất tích các bản ghi hữu ích của máy chủ mặc định bình với các cuộc gọi beeing looged trên bàn điều khiển trong relatime - bạn có biết làm thế nào điều này có thể được thực hiện trong cơn lốc xoáy? @Aaoron –