并行Python:什么是回调?

时间:2009-08-23 17:30:50

标签: python callback parallel-python

Parallel Python中,它在提交函数中有一些名为回调documentation)的内容,但它似乎也没有解释它好。我几天前在他们的论坛上发帖,我没有收到回复。有人会解释回调是什么以及它用于什么?

谢谢。

5 个答案:

答案 0 :(得分:147)

回调是API的消费者提供的函数,然后API可以转向并调用(回调您)。如果我设置了博士的预约,我可以给他们我的电话号码,这样他们就可以在前一天打电话给我确认预约。一个回调就是这样,除了不仅仅是一个电话号码,它可以是任意的指令,比如“在这个地址给我发电子邮件,还打电话给我的秘书,让她把它放在我的日历里。

回调通常用于动作异步的情况。如果你需要调用一个函数,并立即继续工作,你不能坐在那里等待它的返回值让你知道发生了什么,所以你提供一个回调。当函数完全完成其异步工作时,它将使用一些预定的参数调用您的回调(通常是您提供的一些参数,以及一些关于您请求的异步操作的状态和结果)。

如果博士不在办公室,或者他们仍然按照时间表工作,而不是让我等待他回来,这可能是几个小时,我们挂断了,一旦约会已经他们打电话给我。

在这种特定情况下,一旦func执行完毕,并行Python的提交函数将使用您提供的任何参数和func的结果调用您的回调。

答案 1 :(得分:18)

文档中的相关位置:

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)

有关Python中callback模式的更多信息,请参阅例如我的演讲here

答案 2 :(得分:4)

查看链接,看起来就像是一个被调用的钩子。

  

回调 - 回调函数   将通过参数调用           list等于callbackargs +(result,)           一旦计算完成

“一旦计算完成”位似乎含糊不清。关于这个问题,我可以看到submit()调用将工作分配给其他服务器然后返回。因为完成是异步的,而不是阻塞,它允许您提供在某个工作单元完成时调用的函数。如果你这样做:

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

然后提交将确保在目标服务器上完成分布式工作单元时调用work_finished()

当你致电submit()时,你可以提供一个回调,它在与submit()的调用者相同的运行时中调用...并且在分发后调用它工作量功能已完成。

当你在提交中做了一些事情时,有点像“调用foo(x,y)”(

但是,文档可能会更好。在ppython源代码中有一个ganders,看看在submit()

中调用回调的点

答案 3 :(得分:3)

callback是您定义的函数,稍后由您调用的函数调用。

作为示例,请考虑AJAX的工作原理:编写调用后端服务器功能的代码。在将来的某个时刻,它将从该函数返回(“A”代表异步,这就是“并行Python”中的“并行”)。现在 - 因为您的代码调用服务器上的代码,您希望它在完成时告诉您,并且您希望对其结果执行某些操作。它通过调用回调函数来实现。

当被调用函数完成时,它告诉你它完成的标准方法是让你告诉它在你的代码中调用一个函数。这是回调函数,它的工作是处理你调用的低级函数的结果/输出。

答案 4 :(得分:1)

回调只是一个功能。在Python中,函数只是更多的对象,因此函数的名称可以用作变量,如下所示:

def func():
    ...

something(func)

请注意,许多接受回调作为参数的函数通常要求回调接受某些参数。在这种情况下,回调函数将需要接受callbackargs中指定的参数列表。我不熟悉Parallel Python,所以我不知道它到底想要什么。