CherryPy杀死进程如果没有及时ping

时间:2012-08-15 19:39:01

标签: javascript process kill cherrypy

有没有办法让CherryPy(运行于:8080,它的唯一函数是SIGUSR1的监听器)如果没有在一定的秒数内进行ping操作就会终止进程?

当然,用于进程查杀的Python代码不是问题,只是CherryPy检测最后一次ping的方式,并不断地将其与当前时间进行比较 - 如果进程没有在一定的秒数内被ping,则终止进程。

请注意,如果Javascript正在执行ping操作(通过setInterval()),则CherryPy代码中的无限循环会导致.ajax()请求挂起和/或超时,除非有办法让.ajax()只能ping并且不等待任何类型的响应。

感谢您提供的任何提示!

梅森

1 个答案:

答案 0 :(得分:0)

好的,所以答案是设置两个类,一个更新时间,另一个不断检查时间戳是否在20秒内没有更新。如果整个站点不是在CherryPy上构建的,那么在用户离开页面时杀死进程是非常有用的。就我而言,它只是坐在:8080从Zend项目中侦听JS ping。 CherryPy代码如下:

import cherrypy
import os
import time

class ProcKiller(object):

    @cherrypy.expose
    def index(self):
        global var 
        var = time.time()

    @cherrypy.expose
    def other(self):
        while(time.time()-var <= 20):
            time.sleep(1)
        print var
        os.system('pkill proc')     


cherrypy.quickstart(ProcKiller())

ping的字面意思简单如下:

<script type="text/javascript">
function ping(){
    $.ajax({
       url: 'http://localhost:8080'
    });
 }
function initWatcher(){
    $.ajax({
       url: 'http://localhost:8080/other'
    });
 }

ping(); //Set time variable first
initWatcher(); //Starts the watcher that waits until the time var is >20s old
setInterval(ping, 15000); //Updates the time variable every 15s, so that while users are on the page, the watcher will never kill the process
</script>

希望一旦用户离开页面,这可以帮助其他人寻找类似的解决方案来处理杀戮!

梅森