生命周期事件

生命周期事件可以允许在Web服务启动和停止前后执行一些初始化和清理任务,生命周期事件响应函数都是通过.listener()修饰器修饰的普通Python函数,其中响应函数接受两个参数,分别是Sanic类实例和事件循环实例,而修饰器可以接受一个字符串函数,用于指定响应函数所响应的事件。

Sanic中的生命周期事件有以下四个,可以直接用在修饰器上。

  • before_server_start,在Web服务启动之前触发,通常用来初始化数据库连接等。
  • after_server_start,在Web服务启动之后触发,通常用来启动一些依附于Web服务的其他服务。
  • before_server_stop,在Web服务即将停止之前触发,通常用来关闭一些需要提前关闭的服务。
  • after_server_stop,在Web服务停止之后触发,通常用来执行一些后期的清理工作。

这里给出一个启动和关闭数据库连接的示例。

@app.listener("before_server_start)
async def setup_db(app, loop):
	app.db = await db_setup()

@app.listener("after_server_stop")
async def close_db(app, loop):
	await app.db.close()