在django wsgi应用程序中禁用线程

在django wsgi应用程序中禁用线程,django,wsgi,uwsgi,Django,Wsgi,Uwsgi,我正在部署一个使用信号的django应用程序(因此它需要在单个线程中运行)。我可以使用禁用开发服务器中的线程 python manage.py runserver--nothreading--noreload 而且效果很好。为了部署该应用程序,我遵循并使用uwsgi进行了设置。也就是说,用 uwsgi-模块myapp.wsgi 像这样运行应用程序时,如何禁用uwsgi线程 编辑: web应用程序是在线Mathematica解释器,例如。该信号用于实施评估时限。我们目前正在使用线程,但由于GIL评

我正在部署一个使用信号的django应用程序(因此它需要在单个线程中运行)。我可以使用禁用开发服务器中的线程

python manage.py runserver--nothreading--noreload

而且效果很好。为了部署该应用程序,我遵循并使用uwsgi进行了设置。也就是说,用

uwsgi-模块myapp.wsgi

像这样运行应用程序时,如何禁用uwsgi线程

编辑:
web应用程序是在线Mathematica解释器,例如。该信号用于实施评估时限。我们目前正在使用线程,但由于GIL评估可能会“卡住”,因为一切都是CPU限制的。我们还尝试使用多处理,但开销太大

要在部署uwsgi时禁用线程,请在
uwsgi.ini
文件集中
threads
1
,这将限制脚本在每个进程的单个线程中运行:

[uwsgi]
processes = 4
threads = 1

因此,通过这种方式,您可以使用多个进程,每个进程运行一个线程。

考虑到您对Django应用程序中需要信号的解释,我认为您做了一些非常错误的事情

如果您只是在视图中开始计算,这可能需要很长时间,那么您将冻结整个工作人员。这意味着,工作者不能处理任何其他请求。如果您使用的是4个工作者,并且将有5个用户提交需要更多计算的等式,那么将没有资源来处理其中一个的请求,因为所有4个工作者都将忙于计算

这意味着,对于大量用户,您将需要大量的工作人员。每个工人都将消耗资源,而您将非常、非常快地耗尽资源

换句话说,在视图中运行一些长任务是非常糟糕的做法


考虑使用芹菜之类的任务队列,将要求解的每个方程发送到芹菜中。这样,您的工作人员将随时可以处理请求,并且任务将排队。此外,管理冻结的任务也会容易得多。

为什么信号意味着它需要在单个线程中运行?你指的是什么样的信号?@DanielRoseman,Python信号,例如signal.SIGALRM(或unix报警)。否则我会得到
ValueError:signal只在主线程中工作
。在web应用程序中这样做听起来很奇怪。但无论如何,Django与线程无关;您需要查看uwsgi配置文档。@DanielRoseman,也许我不清楚。没有uwsgi时会出现此问题,但我可以传递
--nothreading
--noreload
参数以禁用django中的线程。引用“服务器默认为多线程”。我想知道在使用uwsgi启动应用程序时如何将参数传递给django。我不太明白为什么您希望web应用程序是单线程的,您已经说过了,这样您就可以使用一些python信号,但该信号应该做什么?你需要信号吗
runserver
仅在开发网站时使用,您不应将其参数视为实时版本应该能够执行的操作。