2015-09-20 37 views
0

例如,我在寫一個基本的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() 
+0

@JeffC嗯,我試過創建一個過程來退出程序......但我認爲這不是必需的。 –

+1

正如你在學校所做的那樣,請展示你的工作。 :)這是在SO上獲得問題的過程中的一部分。這對你很有幫助,因爲它會迫使你調查自己的問題並思考問題。這也向讀者證明你做了功課,並做出了合理的嘗試來回答你自己的問題。第三,它可以幫助讀者找到和診斷問題,爲您提供更好的答案,減少浪費時間。 – JeffC

+1

@JeffC好的,謝謝:)。讓我編輯我的問題。 –

回答

2

您可以設置一個報警信號處理程序退出,並觸發在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

+0

沒問題,我在Linux上。讓我試試這個。 –

+0

太棒了!它正在工作。謝謝 :) –

相關問題