2012-06-09 29 views
17

Sau nhiều tìm kiếm và googling tôi quay trở lại giếng. Tôi có Django 1.4 và đang tìm kiếm một ví dụ làm việc phong nha để tìm ra cách để Django làm việc với gevent. Tôi thích khung hình Django nhưng tôi cần nó để xử lý việc bỏ phiếu dài. Tôi đã có một máy chủ làm việc bằng cách sử dụng gevent trên riêng của nó xử lý yêu cầu bỏ phiếu dài cũng như hình ảnh trực tuyến thông qua http khoảng 10 khung hình/giây. Tôi muốn sử dụng tất cả các goodies trong Django để cung cấp một khuôn khổ cho phần này.làm thế nào để kết hợp django cộng với gevent những điều cơ bản?

Có rất nhiều ví dụ ngoài kia, nhưng tiếc là không có ví dụ nào trong số này dường như hoạt động bình thường! Nó sẽ thực sự giúp đỡ để có một ví dụ làm việc để hiểu làm thế nào hai điều này đang làm việc cùng nhau.

Đây là những gì tôi đã tìm thấy cho đến nay và những vấn đề:

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ vấn đề: ImportError: Không thể nhập các thiết lập 'webchat.settings' (Is nó trên sys.path?): Không có mô-đun tên webchat .settings

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst Sự cố: cài đặt không thành công với sự cố cấp phép nhận được gevent Đã cố gắng thủ công lấy nó từ git hub. Ví dụ này chạy, nhưng tạo ra các lỗi này khi các trình duyệt kết nối.

Đây là những thông tin nhưng không cung cấp câu trả lời cơ bản. Need help understanding Comet in Python (with Django) https://bitbucket.org/denis/gevent/src/tip/examples/webchat/chat/views.py http://blog.gevent.org/2009/10/10/simpler-long-polling-with-django-and-gevent/

Những gì tôi hy vọng ai đó có thể giải thích (xin vui lòng, xin vui lòng khá ....) là thế này: Tôi có một trang web cơ bản tạo ra sử dụng Django 1,4 - hướng dẫn ở đây https://docs.djangoproject.com/en/1.4/intro/tutorial01/ là tuyệt vời. Vì vậy, bây giờ tôi cần phải hiểu những gì thay đổi để thực hiện để sử dụng gevent và có thể xử lý các sự kiện không đồng bộ. Tôi chắc chắn nó không phải là khó khăn - Tôi chỉ cần một người hiểu nó để giải thích phải làm gì và cũng những gì đang xảy ra (với những thứ như monkey_patch).

Cảm ơn.

Trả lời

20

Đây là cách tôi chạy Django với gevent + khỉ vá:

  1. Tôi đã sửa đổi manage.py để dòng đầu tiên (sau khi công việc) là from gevent import monkey; monkey.patch_all()

  2. Tôi đã thêm một mới run_production_server kịch bản (xem bên dưới).

Cuối cùng, tôi đã cấu hình máy chủ web front-end của tôi để yêu cầu proxy để cổng 1234 (cảng mà run_production_server đang lắng nghe trên).

from gevent import monkey; monkey.patch_all() 
from gevent.wsgi import WSGIServer 

from django.core.management import setup_environ  
import settings 
setup_environ(settings) 

from django.core.handlers.wsgi import WSGIHandler as DjangoWSGIApp 
application = DjangoWSGIApp() 
server = WSGIServer(("127.0.0.1", 1234), application) 
print "Starting server on http://127.0.0.1:1234" 
server.serve_forever() 

Một số người có thể phàn nàn rằng máy chủ này không đủ "quy mô web". Tôi nghi ngờ họ sẽ có thể cung cấp điểm chuẩn để chứng minh điều đó, nhưng nếu bạn lo lắng bạn cũng có thể sử dụng gunicorn hoặc uwsgi cho máy chủ của mình. Nhưng điều này làm việc tốt cho tôi.

+0

Cảm ơn bạn đã viết kịch bản, đó là một trợ giúp lớn. Nhưng, tôi đã thử điều này và tôi nghĩ rằng tôi đang thiếu một cái gì đó. Tôi bắt đầu với dự án django 1.4 mặc định.Tôi đang khởi động máy chủ với% python manage.py runserver 0.0.0.0:8000. Làm cách nào để sử dụng tập lệnh bạn đã cung cấp? –

+0

Bạn không chắc chắn về phần nào trong quá trình sử dụng? –

+0

Xin lỗi vì đã đặt câu hỏi câm .... làm cách nào để chạy tập lệnh này khi tôi khởi động mọi thứ bằng manage.py? Tôi đang tìm kiếm tài liệu djs wsgi ngay bây giờ và nó đề cập đến wsgi.py - đây có phải là kịch bản của bạn nên đi không? –