1

我有一个要迁移到 dotcloud 的 django 应用程序。Django 内部和我的应用程序中的许多操作都不是异步的,即它们阻塞线程直到它们完成。当我使用 Apache 时,这并没有造成问题,因为每个请求都会打开一个不同的线程。但在 dotcloud 使用的 nginx/uwsgi 中似乎并非如此。看起来,uwsgi 有一个 --enable-threads 和 --threads 选项可用于多线程,但是:

  1. 不清楚 uwsgi dotcloud 使用什么版本,是否支持这些功能
  2. 由于我没有其他人问这个问题,我想知道这是否真的是让并发请求运行的正确方法(使用线程)
4

3 回答 3

1

您可以使用Gunicorn运行 Django 。反过来,Gunicorn 支持多个worker 类,人们报告成功运行 gunicorn+gevents+django [1] [2]

要在 dotCloud 上使用它,您可能必须使用 dotCloud 的自定义服务。如果这是您想尝试的东西,我个人会从 dotCloud使用自定义服务重新实现 python 服务开始,并在其中将 uwsgi 替换为 gunicorn。

于 2012-08-09T07:40:56.000 回答
1

我来这里寻找一些线索,我找到了,谢谢!不过,要真正让东西正常工作,还需要做大量的腿部工作。

这是 github 上的一个示例应用程序,它在 dotcloud 上使用 gunicorn、gevent 和 socketio:

https://github.com/t1m0thy/django-tictactoe/tree/dotcloud

于 2013-02-13T21:07:22.087 回答
-1

线程是 python 中的一个问题——GIL 不允许它们同时运行。所以多处理是一个答案。

或者你可以看看gevent。实际上 gevent 是一种 hack(python 堆栈的猴子补丁)等等,但它允许启动绿色线程。我不确定 gevent 是否可以与 django 结合使用,但谷歌知道;)

于 2012-08-07T17:40:58.470 回答