2013-06-25 30 views
14

Có cách nào trong Flask để gửi phản hồi cho khách hàng và sau đó tiếp tục thực hiện một số xử lý không? Tôi có một vài nhiệm vụ giữ sách sẽ được thực hiện, nhưng tôi không muốn giữ khách hàng chờ đợi.Phản hồi kết thúc bình và tiếp tục xử lý

Lưu ý rằng đây thực sự là những điều thực sự nhanh chóng tôi muốn làm, do đó tạo ra một chuỗi mới hoặc sử dụng hàng đợi, không thực sự phù hợp ở đây. (Một trong những điều này nhanh chóng là thực sự thêm cái gì đó để một hàng đợi công việc.)

+1

Nhìn vào 'cần tây' hoặc một câu hỏi khác http://stackoverflow.com/q/16870858/880326 và http://stackoverflow.com/q/15969213/880326. – tbicr

Trả lời

4

Âm thanh như Teardown Callbacks sẽ hỗ trợ những gì bạn muốn. Và bạn có thể muốn kết hợp nó với mẫu từ Per-Request After-Request Callbacks để giúp tổ chức mã.

+0

Điều này trông gần nhất với những gì tôi muốn. Nó không phải là đường dẫn cụ thể nhưng mô hình đó cho thấy nó có thể dễ dàng thực hiện như thế nào. –

+0

Bạn có mã hoạt động cuối cùng không? – luckydonald

+1

Chỉ là một cập nhật-- điều này không * không * thực hiện những gì người hỏi muốn bởi vì Flask vẫn chờ đợi các chức năng teardown để kết thúc trước khi phát hành phản hồi. –

2

Bạn có thể tìm thấy một ví dụ về cách sử dụng cần tây từ bên trong Flask đây https://gist.github.com/jzempel/3201722

Các ý chính của ý tưởng (ý định chơi chữ) được để xác định các tác vụ giữ sách dài như @ celery.task và sử dụng apply_async 1 hoặc trì hoãn từ trong chế độ xem để bắt đầu tác vụ

2

Tôi gặp sự cố tương tự với blog của mình. Tôi muốn gửi email thông báo tới những người đã đăng ký nhận xét khi nhận xét mới nhưng tôi không muốn người đó đăng nhận xét chờ tất cả email được gửi trước khi nhận được phản hồi của anh ấy.

Tôi đã sử dụng multiprocessing.Pool cho việc này. Tôi bắt đầu một hồ bơi của một công nhân (đó là đủ, trang web lưu lượng truy cập thấp) và sau đó mỗi lần tôi cần gửi email, tôi chuẩn bị mọi thứ trong chức năng xem Flask, nhưng vượt qua cuộc gọi send_email cuối cùng đến hồ bơi qua apply_async.

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