与django在dotcloud上的并发请求

时间:2012-08-07 16:23:30

标签: django multithreading apache dotcloud

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

  1. 目前尚不清楚uwsgi dotcloud的使用版本,以及它们是否支持这些功能
  2. 由于我没有其他人问这个问题,我想知道这是否真的是正确的方式来运行并发请求(使用线程)

3 个答案:

答案 0 :(得分:1)

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

要在dotCloud上使用它,您可能必须使用dotCloud的自定义服务。如果那是你想要尝试的东西,我个人会从dotCloud的reimplementation of python service using the custom service开始,并将uwsgi替换为gunicorn。

答案 1 :(得分:1)

我来这里寻找一些线索,我找到了,谢谢! 尽管如此,还是有相当数量的腿部工作来实际开始工作。

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

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

答案 2 :(得分:-1)

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

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