我写了一个类来启动服务器并管理其资源。像这样:
class Server:
def __init__(self, ...):
# create temporary directory
# initialize server conf files in temp dir
...
def start(self, ...):
# run server in a child process
...
def terminate(self, ...):
# kill server and clean up temp dir
我还有一个测试服务器的脚本。
s = Server()
# send requests to server and check result
run_tests()
s.terminate()
我想确保与服务器关联的资源在脚本末尾被清除。实际上,如果terminate()
被异常或信号中断,则可能不会调用run_test()
。
我看到了几种解决方案。
terminate
方法调用__del__
。但这需要保留人为的引用,以防止s
被GC,并且我读到__del__
容易出错。 finally
子句中),但这需要语法开销。with
结构。在这种情况下,推荐的解决方案是什么?