2012-07-11 25 views
15

Đây là vấn đề của tôi kể từ khi tôi nâng cấp lên OSX Lion: Bất cứ khi nào máy chủ tải lại khi tôi thay đổi một tệp trong dự án Django của tôi, phải mất một thời gian trước khi nó bắt đầu phân phát lại.Quá trình tải lại máy chủ phát triển Django mất quá lâu

Điều này xảy ra ngay cả trong dự án Django 1.4 mới được tạo. Không có vấn đề này mặc dù trên Snow Leopard.

tôi đã sử dụng cProfile và đây là nơi mà nó đã dành phần lớn thời gian của mình:

Ordered by: cumulative time 

ncalls tottime percall cumtime percall filename:lineno(function) 
    1 0.001 0.001 48.068 48.068 manage.py:2(<module>) 
    1 0.000 0.000 48.033 48.033 __init__.py:431(execute_manager) 
    1 0.000 0.000 48.032 48.032 __init__.py:340(execute) 
    1 0.000 0.000 47.908 47.908 base.py:182(run_from_argv) 
    1 0.000 0.000 47.907 47.907 base.py:193(execute) 
    1 0.000 0.000 47.814 47.814 runserver.py:39(handle) 
    1 0.000 0.000 47.814 47.814 runserver.py:69(run) 
    1 0.001 0.001 47.814 47.814 autoreload.py:129(main) 
    1 0.000 0.000 47.813 47.813 autoreload.py:107(python_reloader) 
    1 0.000 0.000 47.813 47.813 autoreload.py:96(restart_with_reloader) 
    1 0.000 0.000 47.813 47.813 os.py:565(spawnve) 
    1 0.000 0.000 47.813 47.813 os.py:529(_spawnvef) 
    1 47.812 47.812 47.812 47.812 {posix.waitpid} 
    ... 

Nhưng tôi không hiểu tại sao?

+2

Tôi gặp sự cố tương tự. Bạn đã tìm thấy một giải pháp? – fceruti

+0

@fceruti no i did not, cho đến một ngày nó biến mất. Không chắc chắn nếu đó là khi tôi nâng cấp lên OSX Mountain Lion mặc dù. – Marconi

+0

Tôi đang gặp vấn đề tương tự. Bất kỳ gợi ý nào? –

Trả lời

1

Trang man cho waitpid cho biết: Cuộc gọi hệ thống waitpid() tạm dừng thực hiện quá trình gọi cho đến khi một đứa trẻ được chỉ định bởi đối số pid đã thay đổi trạng thái. Theo mặc định, waitpid() chỉ chờ cho trẻ bị chấm dứt, nhưng hành vi này có thể sửa đổi được thông qua đối số tùy chọn, như được mô tả bên dưới. http://linux.die.net/man/2/waitpid

Tại sao quá trình con lại thay đổi trạng thái quá lâu? Lệnh django manage.py runserver là một wrapper rất mỏng trên KHÁC lệnh runserver:

2533 pts/0 Ss  0:00 \_ bash 
28374 pts/0 S+  0:00 | \_ ../env/bin/python ./manage.py runserver 
7968 pts/0 Sl+ 20:26 |  \_/home/sandford/workspace/usgm_apps/usgm_apps/../env/bin/python ./manage.py runserver 

Vì vậy, các "ông chủ" (28.374) thông báo một sự thay đổi trên một tập tin và nói với các "công nhân" (7968) để thoát. Sau khi thoát khỏi "công nhân", nó sẽ khởi động một nhân viên mới với các tệp nguồn mới. "Công nhân" mất nhiều thời gian để thoát.

Hoặc OSX THINKS mất nhiều thời gian để thoát. Nếu hệ điều hành được phía sau trên sổ sách kế toán trong hạt nhân vì một số lý do và sự chậm trễ cập nhật nhà nước, bạn có thể kết thúc với một sự chậm trễ như thế này.

Hoặc có thể có điều gì đó khác đang diễn ra hoàn toàn. Đó là bối rối.

+0

[waitpid manpage từ Apple] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/waitpid.2.html), chỉ trong trường hợp có bất kỳ chi tiết nhỏ khác nhau, trong trường hợp này tôi nghĩ rằng không có –

10

(đối với chàng trai vẫn googling câu trả lời)

Tôi có vấn đề tương tự như sử dụng Vagrant (trên máy chủ Windows). Giải pháp cho tôi đã di chuyển virtualenv thư mục ra khỏi đồng bộ hóa /vagrant. Cài đặt mặc định của thư mục được đồng bộ hóa sử dụng nhà cung cấp VirtualBox và đó là vấn đề. Chúng ta có thể đọc về điều này trong một phương pháp đồng bộ từ Vagrant official documentation:

Trong một số trường hợp việc triển khai thư mục mặc định chia sẻ (như VirtualBox chia sẻ thư mục) có hình phạt hiệu suất cao. Nếu bạn thấy hiệu suất thấp hơn so với các thư mục được đồng bộ hóa, NFS có thể cung cấp một giải pháp.

SMB được xây dựng-in cho các máy Windows và cung cấp một hiệu suất cao hơn để thay thế một số cơ chế khác như VirtualBox thư mục chia sẻ.

Xem Vagrant shared folders benchmark để biết thêm thông tin.

+1

Bạn là một phao cứu sinh hoàn chỉnh. Di chuyển thư mục virtualenv của tôi bên ngoài/vagrant hoàn toàn giải quyết vấn đề tốc độ của tôi, cảm ơn! – Steadman

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