2015-01-30 17 views
34

Tôi đã xây dựng một vài ứng dụng Flask, nhưng trên dự án mới nhất của tôi, tôi nhận thấy một điều gì đó hơi lạ trong chế độ phát triển. Dòng thứ hai của thông điệp bình thường trong các thiết bị đầu cuối mà luôn luôn đọc:Ứng dụng Flask "Khởi động lại với stat"

* Running on http://127.0.0.1:5000/ 
* Restarting with reloader 

đã được thay thế bởi:

* Restarting with stat 

Tôi không nghĩ rằng tôi đã thực hiện bất cứ điều gì khác nhau, trên thực tế, tôi bắt đầu bằng cách nhân bản một dự án starter-kit mà tôi đã sử dụng nhiều lần, chính nó, không hiển thị hành vi này. Tôi cũng nhận thấy rằng dự án này tiêu thụ khoảng 15% CPU một cách đều đặn, trong khi dự án khác của tôi hầu như không phải là một blip.

Bất kỳ ý tưởng nào tại sao điều này đang xảy ra?

+1

Tôi có thể xác nhận rằng a) thay đổi hành vi có vẻ là kết quả của thay đổi trong phiên bản Werkzeug. b) rằng việc sử dụng tài nguyên được nâng cao dường như được liên kết với trình nạp lại - thiết lập debug = False thay đổi hành vi. và c) việc cài đặt cơ quan giám sát sẽ giảm yêu cầu tài nguyên hệ thống. Tôi cũng lưu ý rằng việc chạy một ứng dụng trong chế độ dev giờ đây dẫn đến hai trình thông dịch python chạy so với trước đây khi chỉ có một trình chạy. Ngoài ra: với cơ quan giám sát được cài đặt, thông báo sẽ là: 'Khởi động lại với fsevents reloader' – domoarrigato

+0

Trên thực tế, thông báo sẽ thay đổi dựa trên hệ điều hành của bạn, cơ quan giám sát là thông minh về điều đó. Trên Linux, thông báo có thể là "khởi động lại với trình tải lại inotify". – davidism

+0

Cảm ơn bạn đã đặt câu hỏi này. Trong trường hợp của tôi, tải lại * không hoạt động chút nào * cho đến khi tôi cài đặt cơ quan giám sát. – g33kz0r

Trả lời

36

Kiểm tra phiên bản Werkzeug của bạn. Phiên bản 0.10 vừa được phát hành và nhiều thay đổi đã được chuyển vào trình tải lại. Một thay đổi là một trình tải lại bỏ phiếu mặc định được sử dụng; bộ nạp lại pyinotify cũ dường như không chính xác. Nếu bạn muốn bỏ phiếu hiệu quả hơn, hãy cài đặt gói watchdog. Bạn có thể xem mã liên quan đến số này here.

Khi Werkzeug không thể tìm thấy cơ quan giám sát, nó sử dụng trình tải lại stat, nếu không nó sẽ sử dụng bất kỳ trình theo dõi tải lại nào sử dụng, có thể thay đổi theo nền tảng. Thư này chỉ để bạn biết thư nào đang được sử dụng.

+0

Thật không may, cơ quan giám sát dường như không tương thích với 'gevent'. Bất cứ ai có một giải pháp khi sử dụng Flask với gevent? –

+0

Tôi đã mở một vấn đề cho nó: https://github.com/gorakhargosh/watchdog/issues/306 –

3

Sử dụng run(use_reloader=False) để tắt trình tải lại.

Nó đã cho tôi một số vấn đề mà nó không thể tìm thấy tệp máy chủ của tôi khi khởi động lại. Điều này đã làm các trick. Nó thực thi chỉ một lần và mọi thứ hoạt động. Khá kỳ quặc.

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