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
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).
ioloop.add_callback, Tornado sẽ thực thi cuộc gọi lại trong lần lặp IOLoop tiếp theo.
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ế.
Đó 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()
điều này sẽ chặn vòng lặp io? – raylu
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. –
- 1. xử lý yêu cầu json trong PHP
- 2. Python yêu cầu xử lý ngoại lệ
- 3. Khung Web Tornado Xử lý kết nối Mysql
- 4. Cách xử lý nhập dữ liệu sai
- 5. Xử lý yêu cầu không tìm thấy:
- 6. Tải dữ liệu ngoài trong các bộ xử lý
- 7. Xử lý dữ liệu nhị phân trong API Web từ yêu cầu REST POST hoặc PUT
- 8. Xử lý một mẫu biến không xác định trong Tornado
- 9. Xử lý không đồng bộ Django
- 10. Cách xử lý các yêu cầu về chức năng vô lý trong phần mềm của bạn?
- 11. Tomcat 7 Xử lý không đồng bộ không thành công - chỉ một yêu cầu được xử lý đồng thời
- 12. Xử lý nhiều yêu cầu với C# HttpListener
- 13. cách xử lý 2000+ yêu cầu/giây trên tomcat?
- 14. Lỗi mô-đun nhập khẩu yêu cầu xử lý Django
- 15. Cầu cảng xử lý nhiều yêu cầu như thế nào
- 16. Yêu cầu xử lý trong thẻ django inclusion template
- 17. Xử lý dữ liệu Ember 401 của
- 18. Xử lý nhiều yêu cầu HTTP song song trong Node.js
- 19. asp.net xử lý webservice gzip nén yêu cầu
- 20. "Tải trọng" dữ liệu từ bộ xử lý ngữ cảnh
- 21. Cách thực hiện yêu cầu AJAX để đăng dữ liệu JSON và xử lý phản hồi
- 22. Trình xử lý hoàn thành và giá trị trả về
- 23. Xử lý một phần tệp bằng bộ tiền xử lý
- 24. Xmlhttprequest có giữ kết nối mở sau khi yêu cầu đã được xử lý không?
- 25. Cách xử lý yêu cầu thêm trong smack API
- 26. Xử lý không đồng bộ trong C++
- 27. yêu cầu SOAP dùng quá lâu để xử lý dữ liệu lớn
- 28. Làm thế nào để xử lý các yêu cầu chạy dài với trình xử lý HTTP trong IIS?
- 29. Nginx xử lý các yêu cầu HTTP như thế nào?
- 30. Đường ống xử lý dữ liệu đa luồng trong Qt
Nó rất dễ dàng; Tôi sẽ thêm một câu trả lời. –