在Parallel Python中,它在提交函数中有一些称为回调(文档)的东西,但它似乎并没有很好地解释它。几天前我在他们的论坛上发了帖子,但没有收到回复。有人会解释什么是回调以及它的用途吗?
5 回答
回调是 API 的使用者提供的函数,API 可以转身调用(回调您)。如果我安排了医生的预约,我可以给他们我的电话号码,以便他们可以在前一天给我打电话确认预约。回拨就是这样,除了不仅仅是一个电话号码,它可以是任意指令,比如“给我发一封电子邮件到这个地址,也给我的秘书打电话,让她把它放在我的日历上。
回调通常用于异步操作的情况。如果你需要调用一个函数,并立即继续工作,你不能坐在那里等待它的返回值让你知道发生了什么,所以你提供了一个回调。当函数完全完成它的异步工作后,它将使用一些预先确定的参数调用您的回调(通常是您提供的一些参数,以及一些关于您请求的异步操作的状态和结果的参数)。
如果博士不在办公室,或者他们仍在按计划工作,而不是让我等到他回来,这可能要几个小时,我们挂断电话,一旦安排了约会,他们打给我。
在这种特定情况下,Parallel Python 的 submit 函数将使用您提供的任何参数以及func
, 一旦func
完成执行后的结果调用您的回调。
文档中的相关位置:
callback - callback function which will be called with argument
list equal to callbackargs+(result,)
as soon as calculation is done
callbackargs - additional arguments for callback function
因此,如果您希望在结果准备好后立即执行某些代码,您可以将该代码放入一个函数并将该函数作为callback
参数传递。如果您不需要其他参数,则只是,例如:
def itsdone(result):
print "Done! result=%r" % (result,)
...
submit(..., callback=itsdone)
有关callback
Python 模式的更多信息,请参见我的演示文稿。
查看链接,看起来就像一个被调用的钩子。
callback - 一旦计算完成,将使用参数列表调用的回调函数等于 callbackargs+(result,)
“一旦计算完成”位似乎模棱两可。就我所见,关键是submit()
调用将工作分配给其他服务器,然后返回。因为完成是异步的,而不是块的,所以它允许您提供一个函数,当某个工作单元完成时调用该函数。如果你这样做:
submit( ..., callback=work_finished, ... )
然后 submit 将确保work_finished()
在目标服务器上完成分布式工作单元时调用。
当您调用时,submit()
您可以提供与 ...的调用者在同一运行时调用的回调submit()
,并且在工作负载函数的分配完成后调用它。
有点像“当你在 submit() 中做了一些事情时调用 foo(x,y)”
但是,是的,文档可能会更好。看一下 ppython 源代码,看看在哪个点调用回调submit()
回调是您定义的函数,稍后由您调用的函数调用。
例如,考虑 AJAX 的工作原理:编写调用后端服务器函数的代码。在将来的某个时候,它会从该函数返回(“A”代表异步,这就是“Parallel Python”中的“Parallel”的全部含义)。现在 - 因为您的代码调用服务器上的代码,所以您希望它告诉您何时完成,并且您想对其结果做一些事情。它通过调用您的回调函数来实现。
当被调用函数完成时,它告诉你它已经完成的标准方法是你告诉它在你的代码中调用一个函数。那是回调函数,它的工作是处理你调用的低级函数的结果/输出。
回调只是一个函数。在 Python 中,函数只是更多的对象,因此函数的名称可以用作变量,如下所示:
def func():
...
something(func)
请注意,许多接受回调作为参数的函数通常要求回调接受某些参数。在这种情况下,回调函数将需要接受在 callbackargs 中指定的参数列表。我不熟悉 Parallel Python,所以我不知道它到底想要什么。