在Ubuntu12.04上使用mod\wsgi for python3。在
我有一个WSGI应用程序(实际上只是一个脚本),它碰巧为每个用户会话使用Popen启动一个外部程序(它实际上是一个小的GTK程序,我正在用它的HTML5后端进行试验)。在
客户端有一个Javascript循环,每隔几秒钟向WSGI发送一个“保持活动”信号。如果WSGI有一段时间没有收到会话的任何信号,那么它将终止相关进程(并删除会话)。在
这一切都很好,除非我重新启动/重新加载Apache或编辑WSGI脚本(AFAIK会自动重新加载应用程序)。 如果我这样做,子进程不会被杀死。它们仍然在运行(它们不是僵尸),我所能做的就是手动杀死它们(WSGI丢失了以前的会话,所以它不会杀死任何“旧”进程)。在
所以我想要以下其中一种:
以下是我使用的虚拟主机:
<VirtualHost *:80>
WSGIDaemonProcess deckard_qh user=deckard group=deckard threads=5
WSGIScriptAlias / /home/deckard/wsgi/deckard_qh.wsgi
Alias /ressources /home/deckard/ressources
<Directory /home/deckard/wsgi>
WSGIProcessGroup deckard_qh
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
<Directory /home/deckard/ressources>
Order deny,allow
Allow from all
</Directory>
我尝试添加WSGIProcessGroup deckard
和WSGIApplicationGroup %{GLOBAL}
(根据this answer),但它没有改变任何东西。
我还在WSGI脚本的开头添加了os.setsid()
,但没有结果。在
你试过
^{bq}$sudo service apache2 graceful
吗?在http://httpd.apache.org/docs/2.4/stopping.html#graceful
这只是一个草图,但是一个简单的解决方案(孩子们自己管理自己,我最喜欢的儿童解决方案!)会给Popen进程添加一个终止超时,所以如果它们在5分钟内没有收到“keep alive”(保持活动状态)的消息(或者您认为是正确的),那么它们将保存状态(如果合适)并终止?在
我猜gtk_main_quit()将是您用来终止事件循环的,但是如果我不在基础上,请替换which will terminate your child process=)另外,我猜gtk even循环可能有自己的计时器函数,它的实现与线程不同,但我想测试我发布的内容。在
相关问题 更多 >
编程相关推荐