2011-10-04 25 views
5

Tôi đang sử dụng CherryPy để nhận yêu cầu thông qua REST API. Ngoài việc xử lý các yêu cầu, ứng dụng cũng nên thực hiện quản lý tài nguyên vài giây một lần. cách dễ nhất để làm điều này là gì?máy chủ web python và các tác vụ định kỳ

1) chạy một thread riêng biệt

2) cherrypy.process.plugins.PerpetualTimer (không chắc chắn làm thế nào để sử dụng nó, và có vẻ như nó là nặng về tài nguyên?)

3) một số khác đường?

Giải pháp với một sợi riêng biệt là tốt của tôi, nhưng tôi đã tự hỏi nếu có một cách tốt hơn để làm điều đó? Lưu ý rằng CherryPy không phải là một yêu cầu - tôi đã quyết định sử dụng nó chủ yếu bởi vì dự án trông sống động và vì nó hỗ trợ nhiều kết nối đồng thời (nói cách khác: tôi mở để lựa chọn thay thế).

Trả lời

3

PerpetualTimer chỉ là phiên bản lặp lại của luồng._Timer.

Điều bạn thực sự muốn sử dụng là cherrypy.process.plugins.Monitor, ít hơn một cách để chạy một chuỗi riêng cho bạn. Bạn nên sử dụng nó vì nó cắm vào cherrypy.engine, điều chỉnh hành vi bắt đầu và dừng cho các máy chủ CherryPy. Nếu bạn chạy thread của riêng bạn, bạn sẽ muốn có nó dừng lại khi CP tắt anyway; lớp Monitor đã biết cách thực hiện điều đó. Nó sử dụng PerpetualTimer dưới mui xe, cho đến khi các phiên bản gần đây, nơi nó được thay thế bởi lớp BackgroundTask.

my_task_runner = Monitor(cherrypy.engine, my_task, frequency=3) 
my_task_runner.subscribe() 
+0

Hoàn hảo, cảm ơn! Tôi đã chỉnh sửa câu trả lời của bạn để sửa gói gói ([cherrypy.process.plugins.Monitor] (http://docs.cherrypy.org/dev/refman/process/plugins/index.html#cherrypy.process.plugins.Monitor)). Trên một lưu ý khác: tham số cuối cùng được đặt tên không chính xác, nó phải là "khoảng thời gian". Cảm ơn một lần nữa, chỉ là những gì tôi đã có trong tâm trí! – johndodo

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