2011-03-11 46 views
8

Trong trình xử lý yêu cầu cơn lốc xoáy nếu tôi phải gọi hàm foo() không ảnh hưởng đến những gì được trả lại cho người dùng, điều đó có nghĩa là trả lại kết quả cho người dùng trước rồi gọi foo(). Có thể làm điều này dễ dàng trong cơn lốc xoáy (hoặc với một số gói của bên thứ ba) không?Tornado xử lý dữ liệu trong bộ xử lý yêu cầu sau khi trả về

Trả lời

-1

Không, nó không phải là "dễ dàng" out-of-the-box. Những gì bạn đang đề cập đến là "lửa và quên". Ngay cả khi bạn sử dụng một hồ bơi thread để trang trại ra yêu cầu, hồ bơi thread đó sẽ thuộc về quá trình python chính thuộc về Tornado.

Cách tiếp cận tốt nhất là hàng đợi thư. Một cái gì đó giống như Carrot. Bằng cách đó, giả sử bạn có một trang nơi người dùng có thể thực thi để bắt đầu tạo báo cáo HUGE, bạn có thể bắt đầu nó trong hàng đợi thư và sau đó kết thúc yêu cầu Tornado và với một số phép thuật AJAX và các thủ thuật khác (ngoài phạm vi của Tornado) ngồi lại và đợi cho đến khi hàng đợi tin nhắn kết thúc, đó là công việc (có thể xảy ra về mặt kỹ thuật trên một máy chủ phân tán ở một vị trí vật lý khác).

+0

Nó rất dễ dàng; Tôi sẽ thêm một câu trả lời. –

5

ioloop.add_callback, Tornado sẽ thực thi cuộc gọi lại trong lần lặp IOLoop tiếp theo.

0

cảnh báo lời khuyên xấu: bạn có thể sử dụng đa xử lý.

http://docs.python.org/library/multiprocessing.html

hãy cẩn thận rằng bạn đóng tất cả các kết nối cơ sở dữ liệu của bạn (trong mã sinh ra) và làm bất cứ điều gì khác cơn lốc xoáy có thể làm gì khi nó thường hoàn thành một yêu cầu mà không có một tiến trình con. Các câu trả lời khác nghe tốt hơn. Nhưng, bạn có thể làm điều này. Đừng làm thế.

9

Đó là cực kỳ đơn giản:

class Handler(tornado.web.RequestHandler): 
    def get(self): 
     self.write('response') 
     self.finish() # Connection is now closed 
     foo() 
+0

điều này sẽ chặn vòng lặp io? – raylu

+2

Có, nếu foo() không chặn IO. Không, nếu foo() thì không. Quy tắc chung: nếu foo() sử dụng IOStream thì nó không bị chặn. Nếu nó sử dụng ổ cắm không có IOStream thì nó sẽ bị chặn. –

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