本文介绍自定义运行时如何实现并应用函数实例生命周期回调方法。
使用说明
当您实现并配置函数实例生命周期回调后,函数计算将在相关实例生命周期事件发生时调用对应的回调程序。函数实例生命周期涉及Initializer和PreStop回调。
- Initializer回调
Initializer回调在函数实例启动成功后,请求处理程序(Handler)之前执行。 - PreStop回调
PreStop回调在函数实例销毁前执行。
当您配置函数Initializer回调,您需要在您的HTTP服务器程序中实现Path为/initialize和Method为POST的对应逻辑,HTTP状态码返回2xx表示成功,否则表示失败。
当您配置函数PreStop回调,您需要在您的HTTP服务器程序中实现Path为/pre-stop和Method为GET的对应逻辑,HTTP状态码返回2xx表示成功,否则表示失败。
如下是一个简单实现了Initializer回调和PreStop回调的例子:
from http.server import BaseHTTPRequestHandler, HTTPServer
class HelloWorldHandler(BaseHTTPRequestHandler):
def write_response(self, status, body=None):
self.send_response(status)
self.send_header('Content-type', 'text/plain')
self.end_headers()
if body is not None:
self.wfile.write(body.encode())
def do_GET(self):
if self.path == "/pre-stop":
self.write_response(200)
else:
self.write_response(200, "invoke success")
def do_POST(self):
if self.path == "/initialize":
self.write_response(200)
else:
self.write_response(200, "invoke success")
def run(server_class=HTTPServer, handler_class=HelloWorldHandler, port=9000):
server_address = ('', port)
httpd = server_class(server_address, handler_class)
print(f'Starting httpd on port {port}...')
httpd.serve_forever()
if __name__ == '__main__':
run()