回调 _ 以python下的项目blivedm为例

连祈
2022-12-07 / 0 评论 / 41 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年12月07日,已超过864天没有更新,若内容或图片失效,请留言反馈。

调用的三种方式 (参考原文)

同步调用

lbd6wvei.png
同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法再继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞。

异步调用

lbd6y02e.png
是一种类似消息或事件的机制,是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。类A的方法a()通过新起线程的方式调用类B的方法b(),代码接着直接往下执行,这样无论方法b()执行时间多久,都不会阻塞方法a()的执行。但是这种方式,由于方法a()不等待方法b()执行完成,在方法a()需要方法b()执行结果的情况下(视具体业务而定,有些业务比如启动异步线程发个微信通知、刷新一个缓存这种就没有必要),必须通过一定的方法对方法b()的执行结果进行监听。在Java中,可以使用Future+Callable的方式做到这一点。

回调

lbd6ywcf.png
回调的思想是:

    类A的a()方法调用了类B的b()方法
    类B的b方法执行完毕主动调用类A的callback()方法

这样一种调用方式组成了上图,也就是一种双向的调用方式
回调函数是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。


回调

回调函数按照目前比较通行的定义,只要把函数以参数的形式传给其它函数,由其它函数调用,那就是回调函数。

回调有三个部分组成:回调函数、中间函数和起始函数
举个住旅馆叫醒服务的例子:
1.旅馆提供叫醒服务是起始函数
2.有三种叫醒旅客的方式:打电话叫、服务员敲门叫,在你头上浇盆水,这三种叫醒方式属于三种回调函数
3.旅客通知旅馆使用何种叫醒方式的动作,属于中间函数

一、创建三种回调函数:
1.morning_call(me)
2.knocking_door(me)
3.watering_head(me)

二、创建中间函数:
def ask_for_wakeup(people, call_function)
return call_function(people)

三、用起始函数(主函数)来做这件事情
def main():
return ask_for_wakeup('Antony', watering_head)

酱紫,最后一部调用回调函数,又返回回调函数,最终得到结果

阻塞式回调 和 延迟式回调 也可以叫做 同步回调 和 异步回调
在阻塞式回调里,回调函数的调用一定发生在主函数返回之前
在延迟式回调里,回调函数的调用有可能是在起始函数返回之后

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。
在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触发回调事件,店员给你打电话叫做 调用回调函数,你到店里去取货叫做 响应回调事件。

0

评论 (0)

取消