如何为API提供“回调”?

73 投票
5 回答
93085 浏览
提问于 2025-04-15 13:49

我在阅读一些模块文档时,看到了一些我不太明白的内容,特别是在一个方法的参数解释中:

callback - 这是一个回调函数,当计算完成后,会用一个参数列表来调用它,这个列表的内容是callbackargs+(result,)
callbackargs - 这是给回调函数的额外参数。
group - 这是一个作业组,当你调用wait(group)时,用来等待这个组里的作业完成。

我该如何调用这个方法,并正确地提供这些参数呢?它们的用途是什么,这个“回调”机制又是怎么运作的呢?

5 个回答

3

看这个链接,感觉就像是一个被调用的钩子。

回调 - 这是一个回调函数,它会在计算完成后被调用,传入的参数是 callbackargs+(result,)

这里的“计算完成后”听起来有点模糊。根据我的理解,这个东西的重点在于 submit() 调用会把工作分配给其他服务器,然后就返回了。因为这个完成过程是异步的,也就是说它不会阻塞主程序,这样你就可以提供一个函数,当某个工作单元完成时会被调用。如果你这样做:

submit( ..., callback=work_finished, ... )

那么 submit 会确保在目标服务器上分配的工作完成时调用 work_finished()

当你调用 submit() 时,可以提供一个回调,这个回调会在和调用 submit() 的同一个运行环境中被调用...而且是在工作负载函数分配完成后调用的。

有点像“在 submit() 中做完一些事情后调用 foo(x,y)”。

不过,确实,文档可以写得更好。你可以看看 Python 的源代码,看看在 submit() 中回调是在哪个时刻被调用的。

21

如果你想要一些代码在结果准备好后立即执行,就把这些代码放进一个函数里,然后把这个函数作为 callback 参数传递进去。比如说,假设这个函数不需要其他参数:

def itsdone(result):
    print(f"Done! result={result}")
...
submit(..., callback=itsdone)

想了解更多关于这个在Python中是怎么运作的,可以看看我关于这个主题的演示

255

回调函数就是一个由使用API的人提供的函数,API可以在合适的时候调用这个函数,也就是“回叫”你。比如说,我预约了医生的看诊,我可以给他们我的电话号码,这样他们就可以在前一天打电话确认我的预约。回调函数就像这个,只不过它不仅仅是个电话号码,而是可以是一些具体的指令,比如“给我发一封邮件到这个地址,另外打电话给我的秘书,让她把这个安排到我的日历里。”

回调函数通常用在一些需要异步处理的场景中。如果你需要调用一个函数,然后立刻继续做其他事情,你就不能一直等着这个函数返回结果来告诉你发生了什么,这时候就需要提供一个回调函数。当这个函数完成它的异步工作后,它会调用你提供的回调函数,并传递一些预先设定的参数(通常有些是你提供的,还有一些是关于你请求的异步操作的状态和结果)。

比如说,如果医生不在办公室,或者他们还在安排日程,而不是让我一直等着,可能要等几个小时,我们就挂了电话。一旦预约安排好了,他们就会打电话给我。

在这个具体的例子中,文档中提到的方法会计算出一个 result,把它和任何指定的 callbackargs 组合在一起,然后调用 callback,把这些值作为参数传递给它。

撰写回答