19

经过大量搜索和谷歌搜索,我回到了井边。我有 Django 1.4 并且正在寻找一个体面的工作示例来弄清楚让 Django 与 gevent 一起工作。我喜欢 Django 框架,但我需要它来处理长轮询。我已经有一个使用 gevent 的工作服务器,它可以处理长轮询请求以及通过 http 以大约 10 帧/秒的速度流式传输图像。我想使用 Django 中的所有好东西来为这部分提供一个框架。

有很多例子,但不幸的是,这些似乎都不是开箱即用的!有一个可行的例子来理解这两件事是如何协同工作的,真的很有帮助。

这是我到目前为止发现的问题和问题:

http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/ 问题:ImportError:无法导入设置'webchat.settings'(它在sys.path上吗?) : 没有名为 webchat.settings 的模块

https://github.com/codysoyland/django-socketio-example/blob/master/README.rst 问题:安装失败,获取 gevent 的权限问题尝试从 git hub 手动获取它。该示例运行,但在浏览器连接时会生成这些错误。

这些内容提供信息,但不提供基本答案。 需要帮助理解 Python 中的 Comet(使用 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/

我希望有人能解释一下(拜托,拜托......)是这样的:我有一个使用 Django 1.4 创建的基本站点-这里的教程https://docs.djangoproject.com/en/1.4/intro/tutorial01/非常好。所以现在我需要了解要进行哪些更改才能使用 gevent 并能够处理异步事件。我相信这并不难——我只需要理解它的人来解释要做什么以及正在发生的事情(比如monkey_patch)。

谢谢。

4

1 回答 1

24

以下是我使用 gevent + Monkey 修补运行 Django 的方法:

  1. 我已经修改manage.py所以第一行(在shebang之后)是from gevent import monkey; monkey.patch_all()

  2. 我添加了一个新run_production_server脚本(见下文)。

最后,我将前端网络服务器配置为代理对端口1234run_production_server正在侦听的端口)的请求。

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()

有些人可能会抱怨这个服务器不够“网络规模”。我怀疑他们能否提供基准来证明这一点,但如果您担心您也可以使用gunicornuwsgi用于您的服务器。但这对我来说很好。

于 2012-06-12T07:02:45.340 回答