2010-11-22 37 views
5

Cách tốt nhất để xử lý các tác vụ được thực hiện trong Celery là nơi kết quả là lớn? Tôi đang nghĩ về những thứ như bãi chứa hàng và những thứ tương tự, nơi tôi có thể trả về dữ liệu trong hàng trăm megabyte.Tôi nên sử dụng Celery khi kết quả nhiệm vụ lớn như thế nào?

Tôi nghĩ rằng cách tiếp cận ngây thơ của nhồi nhét thông điệp vào cơ sở dữ liệu kết quả sẽ không phục vụ tôi ở đây, ít hơn nhiều nếu tôi sử dụng AMQP cho kết quả phụ trợ của tôi. Tuy nhiên, tôi có một số trong những nơi mà độ trễ là một vấn đề; tùy thuộc vào trường hợp xuất cụ thể, đôi khi tôi phải chặn cho đến khi nó trả về và trực tiếp phát ra dữ liệu xuất từ ​​trình khách tác vụ (yêu cầu HTTP đến nội dung xuất, nó không tồn tại, nhưng phải cung cấp để đáp lại yêu cầu đó ... dù có mất bao lâu)

Vậy, cách tốt nhất để viết nhiệm vụ cho việc này là gì?

Trả lời

4

Một tùy chọn sẽ là có một máy chủ HTTP tĩnh chạy trên tất cả các máy của nhân viên của bạn. Nhiệm vụ của bạn sau đó có thể đổ kết quả lớn vào một tệp duy nhất trong thư mục gốc tĩnh và trả về tham chiếu URL cho tệp. Người nhận có thể lấy kết quả lúc rảnh rỗi.

ví dụ: Một cái gì đó mơ hồ như thế này:

Tất nhiên bạn cần một số phương tiện gặt hái các tệp cũ, đảm bảo tính độc đáo và các vấn đề khác, nhưng bạn có ý tưởng chung.

0

Tôi xử lý việc này bằng cách cấu trúc ứng dụng để ghi các kết quả nhiều megabyte vào các tệp, mà tôi ghi nhớ vào bộ nhớ để chúng được chia sẻ giữa tất cả các quá trình sử dụng dữ liệu đó ... kết quả cho một máy khác, nhưng nếu kết quả là lớn, có vẻ như các nhiệm vụ này là các nhiệm vụ nội bộ phối hợp giữa các tiến trình máy chủ.

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