2012-10-10 23 views
11

Tôi hiểu rằng cả hai tornadogevent là các khung python không đồng bộ.Sự khác biệt giữa gevent và lốc xoáy

Khi đọc bottle documentation Tôi thấy rằng gevent thực sự KHÔNG phải là không đồng bộ và bạn có thể tạo hàng nghìn thành chuỗi giả để hoạt động đồng bộ.

Ngẫu nhiên, trong gevent, bạn không thể chấm dứt trình xử lý yêu cầu sớm và bạn cần trả lại câu trả lời đầy đủ, trong khi trong cơn lốc xoáy bạn có thể. (sửa tôi nếu tôi sai ở đây)

Có thể một số mô tả chi tiết cách các hệ thống này hoạt động nội bộ và theo cách nào chúng khác nhau. Ngoài ra, làm thế nào để WSGI chơi với bản chất không đồng bộ của các hệ thống này? Các khung làm việc này có phù hợp với WSGI, nếu có, làm thế nào?

+0

tôi nghĩ rằng động cơ http://emptysquare.net/motor/ là giải pháp đã tạo cầu nối giữa chúng: p –

Trả lời

24

Có một chi của:

http://en.wikipedia.org/wiki/Coroutines

và:

http://en.wikipedia.org/wiki/Event-driven_architecture

http://en.wikipedia.org/wiki/Event-driven_programming

Gói gevent sử dụng coroutines và Tornado là sự kiện thúc đẩy.

Ngay cả hệ thống điều khiển không dễ dàng lập bản đồ cho WSGI, nhưng hệ thống coroutine, vì nó trông giống như các chủ đề, có thể được thực hiện để hỗ trợ WSGI nếu các điểm chặn có thể được vá để chuyển đổi coroutines khi mọi thứ sẽ bị chặn.

+1

Cảm ơn bạn! Giải thích rất gây nghiện! – emanuelcds

19

gevent và Tornado hơi khác một chút. gevent là nhiều hơn như Twisted - một khung mạng không đồng bộ, trong khi Tornado là một khuôn khổ chỉ web.

Điểm nổi bật chính của gevent là nó sử dụng coroutines và làm cho mã trông giống như đang chạy đồng bộ, nhưng trên thực tế hầu hết các chức năng chặn IO đều không chặn và điều khiển trở lại vòng lặp chính của gevent. Điều này rất quan trọng đối với lập trình liên kết IO vì nó cho phép bạn viết mã chuỗi đơn hiệu quả cao giống như cách bạn sẽ viết mã đa luồng, đó là nhiều tài nguyên đói hơn.

gevent cũng bao gồm một trình xử lý yêu cầu WSGI để nó có thể được sử dụng để xử lý các yêu cầu HTTP một cách độc lập, như Tornado.

Tornado là một khung công tác không đồng bộ dựa trên lập trình để viết mã không đồng bộ bằng Python, thường là một nỗi đau trong Backend vì không có nhiều lớp hoặc lớp ẩn danh ẩn danh, như trong JavaScript hoặc Java. Vì vậy, việc viết mã tốt bằng Tornado thực sự khó khăn. Ví dụ, sử dụng các thư viện chặn trở thành một nỗi đau.

Thực tế cả hai khung là không đồng bộ ở lõi của chúng, nhưng mã kết quả trông hơi khác một chút (dễ lập trình hơn với gevent).

Bạn thực sự có thể sử dụng Torando và gevent cùng nhau, nhưng tôi chưa thử nó (chưa).

+0

+1 nhưng bạn quên nói rằng cơn lốc xoáy có một thùng chứa wsgi và nó trở thành một máy chủ web. – BlaShadow

+1

Tôi không biết có khó viết mã không đồng bộ với Tornado hay không.Nếu bất cứ điều gì, từ khóa 'yield' - mà JavaScript thiếu cho bây giờ - làm cho mã rất sạch sẽ và dễ làm theo. Không có cuộc gọi lại nào. Ngoài ra, xử lý ngoại lệ tập trung với Tornado là cách gọn gàng hơn với NodeJS, nơi bạn phải biết bạn đang làm gì, nếu không bạn sẽ bị rò rỉ bộ nhớ. –

+2

"đau trong phụ trợ" - yêu thích nó! – FullStack

Các vấn đề liên quan