0

我在 Zope 中用于生成和提供动态图形和图表的库有一个不错的小线程问题。有关我的原始问题的描述,请参阅问题。

由于该网站已经投入生产,我没有时间调试该库(我不是 C 和线程方面的专家),因此我正在寻找快速修复。我能想到的最好的主意是使用 mod_wsgi 作为某种警卫:

WSGIScriptAlias /graphs /path/to/my/app.wsgi
WSGIDaemonProcess mysite user=www-data group=www-data processes=1 threads=1

wsgi 应用程序/path/to/my/app.wsgi将简单地将每个请求重定向到/_graphsZope 再次处理的每个请求。因为我将 wsgi 应用程序限制为一个具有一个线程的进程,所以它应该可以防止任何线程问题。该网站的容量不高,我真的不在乎这是否会降低我的性能。此外,我不关心/_graphsURL 是否不受直接访问保护,只有在同时下载图表时才会出现原始问题,这仅在用户查看包含多个嵌入式动态图表的页面时才会发生。

尽管如此,这个“解决方案”(如果它真的有效的话)让我脑子里的小计算机科学家哭得像个婴儿。有更好的想法吗?

4

1 回答 1

2

您不需要重定向。做:

WSGIDaemonProcess multithreaded processes=1 threads=15
WSGIDaemonProcess singlethreaded processes=3 threads=1

WSGIScriptAlias / /path/to/my/app.wsgi

WSGIProcessGroup multithreaded

<Location /graphs>
WSGIProcessGroup singlethreaded
</Location>

换句话说,将应用程序分布在多个守护进程组中,使用 Location 指令来委派要在单线程进程组中处理的特定 URL。

请注意,通常不会使用“processes=1”,因为 WSGIDaemonProcess 无论如何都默认使用一个进程。在这种情况下,我们确实想要它,因为任何使用 'processes' 选项都会导致 'wsgi.multiprocess' 设置为 True,在这种情况下,我们仍然希望该标志对于 'multithreaded' 进程为真,以便代码知道它是多进程配置的一部分,即使该特定守护进程组中只有一个进程。

于 2009-12-08T20:10:25.357 回答