代码之家  ›  专栏  ›  技术社区  ›  Remi Guan cdlane

如何退出程序但函数仍在运行?

  •  0
  • Remi Guan cdlane  · 技术社区  · 11 年前

    例如,我正在编写一个基本的wsgi服务器程序。

    这个程序运行得很好,但服务器会一直运行,直到我按下 中心-C 。我希望该程序在服务器运行10分钟后退出。

    我尝试过创建一个退出程序的过程,但我认为这不是必需的,而且不起作用:

    import time
    import sys
    from multiprocessing import Process
    from wsgiref.simple_server import make_server
    def application(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [b'Hello']
    
    def p_exit():
        time.sleep(600) 
        sys.exit()
    
    
    p = Process(target=p_exit)
    p.start()
    
    httpd = make_server('', 80, application)
    httpd.serve_forever()
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    您可以将报警信号处理程序设置为退出,并在10分钟内触发报警:

    def handler(*args):
        sys.exit(1)
    
    signal.signal(signal.SIGALRM, handler)
    signal.alarm(60*10)
    
    # Now start the wsgi application and wait
    httpd = make_server('', 80, application)
    httpd.serve_forever()
    

    然而 ALRM 信号仅为*nix,对于Windows系统,您需要尝试以下操作 this .