我正在写一个 django 项目,我需要一个并行线程来执行某些任务。
该项目将使用 mod_wsgi 部署在 Apache2.2 中。
实际上,我的实现包含在一个线程上,该线程具有一段时间的 True - Sleep,它是从我的django.wsgi文件中调用的。
这个实现正确吗?
提出了两个问题:django.wsgi 是否只被调用一次?我会运行那个线程实例吗?其次,我需要“手动”访问至少一个页面才能运行线程。有解决方法吗?
有人对更好的解决方案有一些提示吗?
提前致谢。
我正在写一个 django 项目,我需要一个并行线程来执行某些任务。
该项目将使用 mod_wsgi 部署在 Apache2.2 中。
实际上,我的实现包含在一个线程上,该线程具有一段时间的 True - Sleep,它是从我的django.wsgi文件中调用的。
这个实现正确吗?
提出了两个问题:django.wsgi 是否只被调用一次?我会运行那个线程实例吗?其次,我需要“手动”访问至少一个页面才能运行线程。有解决方法吗?
有人对更好的解决方案有一些提示吗?
提前致谢。
至于您对必须请求触发创建线程的解决方法的请求,您有两个选择。第一个是使用 WSGIImportScript 指令在启动时预加载您的 WSGI 脚本文件。第二个是使用 WSGIScriptAlias 的 process-group 和 application-group 选项来实现相同的目的。
第二种方式是首选。您还需要确保您使用的是守护程序模式,这样如果 WSGI 脚本文件被更改,整个进程就会重新加载。如果您使用嵌入模式并且更改了 WSGI 脚本文件,则只会重新加载脚本并且您将创建第二个后台线程。
因此,对于守护程序模式使用:
WSGIDaemonProcess mysite
WSGIScriptAlias / /some/path/django.wsgi process-group=mysite application-group=%{GLOBAL}
进程组和应用程序组选项都显式提供给 WSGIScriptAlias 具有在任何请求到达之前在进程启动时预加载 WSGI 脚本文件的副作用。
请注意,您必须使用 mod_wsgi 3.0 或更高版本才能为 WSGIScriptAlias 提供选项来实现此目的。
更新 1
如果您在 Windows 上并且无权访问守护程序模式:
WSGIImportScript /some/path/django.wsgi application-group=%{GLOBAL}
WSGIScriptAlias / /some/path/django.wsgi application-group=%{GLOBAL}
似乎是 mod_wsgi 中的一个遗漏,即当守护程序模式不可用时仅为 WSGIScriptAlias 设置应用程序组,仍然会导致预加载。
为什么需要它在线程中运行?如果您想要一个单独的长时间运行的进程,请从命令行或守护程序创建一个。或者,使用像celery这样的东西。