還是端口我有一個將在一個不同的進程HTTP服務器調用對一些集成測試代碼。該服務器可能會受到活動污染,所以我希望能夠按需啓動和停止新實例。的Python atexit對在不同的工藝清理服務器上運行 - 在使用
這不幸是不工作...我遇到了我的地方是服務器上運行的端口,我的進程退出後仍處於鎖定狀態的情況下(這意味着如果我快兩倍運行測試,它失敗第二次因爲端口被鎖定)。
我使用atexit.register
綁定的關閉方法試圖和它不工作要麼。
下面是該服務器的代碼:
from BaseHTTPServer import BaseHTTPRequestHandler
import SocketServer
import atexit
class RestHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/sanitycheck':
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write("{ 'text': 'You are sane.' }")
else:
self.wfile.write(self.path)
def kill_server(httpd):
open("/tmp/log", "w").write("KILLING")
httpd.shutdown()
def start_simple_server(port):
httpd = SocketServer.TCPServer(("", port), RestHTTPRequestHandler)
atexit.register(kill_server, httpd)
httpd.serve_forever()
return httpd
沒什麼東西可以寫到/ tmp /日誌這讓我覺得atexit
是沒有得到調用。
這是我如何實例化服務器:
p = Process(target=start_simple_server, args=(port,))
p.start()
然後當我做終止它,我只要致電:
p.terminate()
這確實殺死進程,並應(我理解)觸發atexit
電話 - 但它不是:(
有什麼想法?
我認爲應該?我能做些什麼呢? – ashgromnies 2011-04-19 18:25:54