python监听器_Sanic Listener – 监听器

Sanic提供的监听器(listener)允许我们在应用程序生命周期内的多个时间点运行一些代码。

监听器分类

如果你想在Server开始时执行一些初始化代码,或者是在Server结束时执行一些清除代码,你就可以使用下面这些监听器:(和中间件一样,监听器的类型也是通过字符串参数来分类的)

before_server_start

after_server_start

before_server_stop

after_server_stop

这些中间件通过修饰器@app.listener修饰接受app和loop参数的函数来实现。比如:

@app.listener('before_server_start')

async def setup_db(app, loop):

app.db = await db_setup()

@app.listener('after_server_start')

async def notify_server_started(app, loop):

print('Server successfully started!')

@app.listener('before_server_stop')

async def notify_server_stopping(app, loop):

print('Server shutting down!')

@app.listener('after_server_stop')

async def close_db(app, loop):

await app.db.close()

监听器注册方法:register_listener

除了使用修饰器还可以通过register_listener方法来注册监听器。这个方法的用处是,方便你在其它模块定义监视器函数,并在app所在文件进行注册。

# file: my_listener.py

async def setup_db(app, loop):

app.db = await db_setup()

# file: app.py

from my_listener import setup_db

app = Sanic()

app.register_listener(setup_db, 'before_server_start')

Sanic add_task方法

如果你想安排一个后台任务在事件循环开始后执行,Sanic提供了add_task方法来帮你轻松实现。

async def notify_server_started_after_five_seconds():

await asyncio.sleep(5)

print('Server successfully started!')

app.add_task(notify_server_started_after_five_seconds())

Sanic将试图自动注入app对象,可以作为一个参数传递给任务函数:

async def notify_server_started_after_five_seconds(app):

await asyncio.sleep(5)

print('Server successfully started!')

app.add_task(notify_server_started_after_five_seconds)

或者可以显式地传递app可以起到同样的效果:

async def notify_server_started_after_five_seconds(app):

await asyncio.sleep(5)

print('Server successfully started!')

app.add_task(notify_server_started_after_five_seconds(app))

我的公众号:猿人学 Python 上会分享更多心得体会,敬请关注。

***版权申明:若没有特殊说明,文章皆是猿人学 yuanrenxue.com 原创,没有猿人学授权,请勿以任何形式转载。***

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值