如何退出程序但函数仍然是运行?
How to exit program but a function is still running?
例如,我正在编写一个基本的 wsgi 服务器程序。
此程序运行完美,但服务器将保持 运行,直到我按下 Ctrl-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()
可以设置一个告警信号处理程序退出,并在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.
例如,我正在编写一个基本的 wsgi 服务器程序。
此程序运行完美,但服务器将保持 运行,直到我按下 Ctrl-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()
可以设置一个告警信号处理程序退出,并在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.