阻塞式回调函数和延迟式回调函数

本文介绍了回调函数的基本概念,通过购物的例子解释了回调函数的登记、触发和响应过程。讨论了阻塞式回调(同步回调),即回调函数在起始函数返回前调用,以及延迟式回调(异步回调),它通常需要多线程或多进程环境,以允许程序在回调执行完毕后再继续其他任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,有三种函数:

起始函数:大致可以等同于主函数

中间函数:中间函数把回调函数作为参数传递执行

回调函数:一个有独立功能的函数

怎么理解:

你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。

在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触发回调事件,店员给你打电话叫做 调用回调函数,你到店里去取货叫做 响应回调事件

# 回调函数
def double(x):
    return x*2

# 中间函数
def get_oddnum(k, fun):
    return 1+fun(k)

# 起始函数
def main():
    x = 3
    # 通过自定义回调函数
    result = get_oddnum(x, double)
    # 通过匿名函数执行回调
    result2 = get_oddnum(x, lambda a:a*8)

在C++中呢也是类似,中间函数有一个参数是函数指针

回调的分类:

阻塞式回调(同步回调):上面的例子就是阻塞式回调,也就是说回调函数的调用发生在起始函数返回之前,也就是说result被赋值之前就被调用

延迟式回调(异步回调):延迟式回调需要多线程或者多进程才能实现,比如上面代码中get_oddnum函数换成是一个要实现将数据写入数据库的函数,返回值为写入结果,那么我们就需要进行取舍,让程序继续执行其他线程,当回调函数执行完成后在发出信号表示自己执行完了然后返回

import threading

def wr(text):
    with open(r'c:\ads\hwq.txt','w+') as f:
        f.write(text)

def get_wr_status(text):
    return wr(text)

def main():
    txt1 = "一个大文件"
    txt2 = "另一个大文件"
    t1 = threading.Thread(target=get_wr_status, args=(txt1, ))
    t2 = threading.Thread(target=get_wr_status, args=(txt2, ))
    t1.start()
    t2.start()
    t1.join()
    t2.join()


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值