2011-07-05 18 views
14

Để đạt được điều gì đó tương tự như cuộc gọi trì hoãn của công cụ ứng dụng của Google (nghĩa là yêu cầu được xử lý và sau đó tác vụ trì hoãn được xử lý), tôi đã thử nghiệm một chút và đưa ra giải pháp để sinh ra một chuỗi trong đó cuộc gọi trì hoãn của tôi Được xử lý.Có ổn không khi đẻ các luồng trong ứng dụng wsgi?

Tôi hiện đang cố gắng xác định xem đây có phải là cách chấp nhận được hay không.

Có thể (theo đặc tả của WSGI) rằng quá trình được chấm dứt bởi máy chủ web sau khi yêu cầu thực tế được xử lý, nhưng trước khi tất cả các chuỗi chạy hết?

(nếu có một cách tốt hơn, đó sẽ là cũng tốt)

+3

Có thể bạn sẽ muốn có một số loại hàng đợi công việc + sắp xếp nhóm luồng, cả về hiệu suất và để tránh có quá nhiều luồng mà chúng bỏ đói cho nhau. – Marcin

+0

@Marcin: tốt điểm, khi nó cho thấy cách tiếp cận thread là khả thi, tôi sẽ thực hiện một cơ sở hạ tầng như vậy – keppla

+0

Tôi thất vọng bạn chưa có bất kỳ câu trả lời nào được nêu ra. – Marcin

Trả lời

7

FWIW, cũng có một chi của:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

Các hooking của các hành động để đóng() của iterable là cách duy nhất trong bối cảnh của đặc tả WSGI bản thân để thực hiện công việc trì hoãn. Đó không phải là trong một thread riêng biệt và sẽ xảy ra trong bối cảnh của yêu cầu thực tế, mặc dù sau khi phản ứng được cho là đã được flushed trở lại cho khách hàng. Do đó, hành động trì hoãn của bạn sẽ tiêu thụ chuỗi yêu cầu đó cho đến khi công việc hoàn tất và do đó chuỗi yêu cầu sẽ không thể xử lý các yêu cầu khác cho đến lúc đó.

Nói chung, nếu bạn sử dụng chủ đề nền, không có gì đảm bảo rằng mọi cơ chế lưu trữ sẽ đợi cho đến khi các luồng nền đó hoàn tất trước khi tắt quá trình. Trong thực tế, thậm chí không thể nghĩ ra bất kỳ cơ chế triển khai chuẩn nào mà chờ đợi. Thậm chí không có sự đảm bảo rằng các trình xử lý ngoại tuyến sẽ được gọi là tắt quá trình, một cái gì đó mà tài liệu tham chiếu cũng nói ngắn gọn về nó.

13

WSGI không xác định thời gian tồn tại của một quá trình ứng dụng (như ứng dụng WSGI là một Python đối tượng callable). Bạn có thể chạy nó theo cách hoàn toàn độc lập với máy chủ web, trong trường hợp đó, chỉ bạn mới kiểm soát được toàn bộ thời gian.

Cũng không có gì trong WSGI sẽ cấm bạn từ các chủ đề sinh sản hoặc quy trình hoặc làm bất cứ điều gì bạn muốn.

+1

Thuật ngữ tuyệt vời. –

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