2011-10-19 8 views
5

Tôi đang trong quá trình tạo giao diện django-powered (1.3) cho gói phụ thuộc rất nhiều vào scipy.stats.stats (phiên bản scipy 0.9.0), được gọi là ovl . Trong giai đoạn phát triển ban đầu, sử dụng máy chủ phát triển riêng của djangos, điều này không thành vấn đề. Sau khi triển khai bằng cách sử dụng apache debian/2.2.9 và mod_wsgi 3.3, điều này gây ra một vấn đề nghiêm trọng.Sử dụng scipy.stats.stats trong django sau khi triển khai

Bất kể chế độ xem nào tôi đang cố gắng tải trong trình duyệt, nó bắt đầu tải và tiếp tục thực hiện trong 5 phút (cho đến khi hết giờ) và 500 trang xuất hiện. Chỉ cần nhập các công trình scipy nhưng, không không làm cho scipy.stats.stats hoặc thậm chí scipy.stats có sẵn. Điều này là không có gì ngạc nhiên; trong tài liệu hướng dẫn trong scipy init .py nó được nói rằng subpackage stats cần phải được nhập một cách rõ ràng. Tuy nhiên, tương tự như vậy được nói về subpackage cluster, nhập khẩu trong django (từ web trong django-shell) mà không có bất kỳ vấn đề và thực sự xuất hiện trong dir(scipy), mà nó không trong một ipython (0.10 .2) -session, nơi nó không xuất hiện, như tôi mong đợi.

Trên lệnh dir(scipy); nó trả về các kết quả khác nhau khi đến từ trang web (danh sách 568 chuỗi, bao gồm cả gói phụ cluster) trong vỏ ipython bình thường (564 dây, không có gói phụ cluster) và bất ngờ, bất ngờ, trong vỏ django. Trong scicky shell django có 570 thuộc tính, bao gồm cả các gói clusterstats.

Một điều nữa là, nếu tôi tiếp tục nhập ovl -package, trong khi vẫn giữ scipy.stats nhập ở một khoảng cách (không phải trong một tệp của chính ứng dụng), đôi khi tôi gặp lỗi ViewDoesNotExist rằng không có chỉ mục phương pháp trong mô-đun lượt xem trong khi rõ ràng là một chỉ mục. Điều này nhắc tôi về số this.

Vì vậy, bây giờ tôi đang nghĩ đến việc các giải pháp này khá xấu xí:

  • Editing scipy của init để nhập khẩu các gói số liệu thống kê để nó xuất hiện 'bình thường' trong dir (scipy) và có thể truy cập thông qua scipy.stats và tôi có thể sử dụng mã cũ.
  • giật gói con stat scipy và thực hiện một gói thường xuyên ra khỏi nó (có lẽ sử dụng một liên kết tượng trưng)

Tôi miễn cưỡng trong việc áp dụng các giải pháp này, tuy nhiên. Các cụm thực tế xuất hiện trong scipy trong một môi trường django lo lắng cho tôi một chút. Tôi nghĩ có thể điều này liên quan đến việc trở thành người dùng www-data khi đăng nhập từ web, nhưng tôi không biết cách kiểm tra điều đó.

Có ai khác gặp phải điều này không? Các phần của điều này? Hoặc những suy nghĩ hữu ích khác?

Oh và một triển khai django khác hiện hoạt động.

Trả lời

5

mod_python được sử dụng để thử sử dụng nhiều trình thông dịch Python trong cùng một quy trình. mod_wsgi có thể làm tương tự. Trong khi điều này thường xuyên hoạt động được, một số mô-đun mở rộng không hỗ trợ điều này. scipy.stats có lẽ đang nhập một mô-đun mở rộng như vậy. Chúng tôi đã có các báo cáo tương tự về danh sách gửi thư scipy liên quan đến scipy.stats dưới mod_python. Kiểm tra tài liệu mod_wsgi để xem liệu bạn có thể cấu hình nó sao cho nó không sử dụng nhiều trình thông dịch trong cùng một tiến trình hay tìm một chiến lược triển khai khác sử dụng một trình thông dịch cho mỗi tiến trình cho ứng dụng.

+2

Sử dụng câu trả lời này Tôi googled và tìm thấy [câu hỏi này] (http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API) và thông qua đó cả giải pháp và [giải thích] (http: // code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API). Giải quyết nó bằng cách đặt ' \t WSGIApplicationGroup% {} GLOBAL \t Đặt hàng cho phép, từ chối \t Allow from all \t 'trong httpd.conf của tôi. Dòng thứ hai là dòng làm điều gì đó về trình thông dịch phụ. – koekiezorro

1

Tôi cũng gặp sự cố này khi tôi sử dụng scipy.stats trong ứng dụng django của mình. Trong môi trường django manage.py runsever, ứng dụng của tôi được thực thi chính xác mà không gặp bất kỳ sự cố nào. Nhưng khi tôi triển khai ứng dụng lên máy chủ apache với mod_python, tôi không thể nhập ứng dụng của mình và trình duyệt tiếp tục tải cho đến khi hết thời gian. Sau khi tôi xóa tất cả các câu lệnh scipy.stats đã nhập trong ứng dụng của mình, sự cố được giải quyết và tôi có thể thực thi ứng dụng của mình trong máy chủ apache.