Tôi đang tạo một ứng dụng web bằng cách sử dụng Python + Tornado mà về cơ bản phục vụ tệp cho người dùng. Tôi không có cơ sở dữ liệu.Tornado async gọi đến một hàm
Các tệp được trực tiếp đón và phân phát nếu chúng có sẵn hoặc được tạo khi đang di chuyển nếu không.
Tôi muốn khách hàng được phục vụ theo cách không đồng bộ, vì một số tệp có thể đã có sẵn, trong khi các tệp khác cần được tạo (vì vậy chúng cần đợi và tôi không muốn chúng chặn người dùng khác).
Tôi có một lớp học quản lý việc chọn hoặc tạo tệp và tôi chỉ cần gọi nó từ Tornado.
Cách tốt nhất (hiệu quả nhất trên CPU và RAM) để đạt được điều đó là gì? Tôi có nên sử dụng một sợi không? Một tiến trình phụ? Một đơn giản gen.Task like this one?
Ngoài ra, tôi muốn triển khai của mình hoạt động trên Công cụ ứng dụng của Google (Tôi cho rằng chúng không cho phép các quy trình phụ được sinh ra?).
Tôi tương đối mới đối với dịch vụ web không đồng bộ, vì vậy mọi trợ giúp đều được chào đón.
Các gen.Task sẽ hoạt động tốt. Nếu tập tin của bạn nhận được/tạo ra mã không thể chơi độc đáo trong đó sau đó một sợi sẽ làm việc tốt. Bạn cũng có thể sinh ra nhiều quy trình, nhưng tôi không biết các giới hạn trên Google App Engine. – sean
Cảm ơn bạn đã trả lời. Bạn cũng biết làm thế nào nó sẽ làm việc ra nếu tôi đẻ trứng nhiều gen.Task? Tôi có nghĩa là, ** phương pháp dụ ** của tôi có thể khá CPU và tốn thời gian, nếu phương pháp này được gọi nhiều lần từ nhiều người dùng, điều gì sẽ xảy ra?Tất cả các phương thức có chạy không đồng bộ song song hoặc các phương thức tiếp theo sẽ chờ các phương thức trước đó kết thúc trước? (lưu ý rằng tôi có một trường hợp duy nhất trong lớp của mình mà tôi sử dụng trong toàn bộ ứng dụng của mình) – gaborous
Hoàn toàn bị xóa, nó sẽ ổn, nhưng bất kể giải pháp của bạn, nó sẽ trở thành vấn đề với rất nhiều luồng bất kể. Nếu đây là một lo lắng, hãy thử xem xét tách thành các quá trình riêng biệt hoặc chạy nhiều trường hợp phía sau cân bằng tải. – sean