并行Python:什么是回调?

并行Python:什么是回调?,python,callback,parallel-python,Python,Callback,Parallel Python,实际上,它在submit函数中有一个称为callback()的东西,但是它似乎没有很好地解释它。几天前我在他们的论坛上发了帖子,但还没有收到回复。有人能解释一下回调是什么以及它的用途吗?看看链接,就像一个被调用的钩子 回调-回调函数 将用参数调用 列表等于callbackargs+(结果,) 一旦计算完成 “一旦计算完成”这一点似乎模棱两可。就我所知,关键是submit()调用将工作分配给其他服务器,然后返回。因为完成是异步的,而不是块,所以它允许您提供一个函数,当某个工作单元完成时调用该函数。

实际上,它在submit函数中有一个称为callback()的东西,但是它似乎没有很好地解释它。几天前我在他们的论坛上发了帖子,但还没有收到回复。有人能解释一下回调是什么以及它的用途吗?

看看链接,就像一个被调用的钩子

回调-回调函数 将用参数调用 列表等于callbackargs+(结果,) 一旦计算完成

“一旦计算完成”这一点似乎模棱两可。就我所知,关键是
submit()
调用将工作分配给其他服务器,然后返回。因为完成是异步的,而不是块,所以它允许您提供一个函数,当某个工作单元完成时调用该函数。如果您这样做:

submit( ..., callback=work_finished, ... )
然后submit将确保在目标服务器上完成分布式工作单元时调用
work\u finished()

调用
submit()
时,可以提供一个回调,该回调与
submit()
的调用者在同一运行时调用。。。并在完成工作负载函数的分配后调用

有点像“在submit()中完成某些操作后调用foo(x,y)”


但是,是的,文档可能会更好。查看ppython源代码,查看在文档中的相关位置调用回调的时间点:

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
因此,如果希望在结果准备好后立即执行某些代码,可以将该代码放入函数中,并将该函数作为
回调
参数传递。如果您不需要其他参数,它将只是,例如:

def itsdone(result):
  print "Done! result=%r" % (result,)
...
submit(..., callback=itsdone)

有关Python中
回调
模式的更多信息,请参见例如我的演示。

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

def func():
    ...

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

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

作为一个例子,考虑Ajax是如何工作的:编写调用后端服务器函数的代码。在将来的某个时候,它会从该函数返回(A代表异步,这就是“并行Python”中的“并行”的全部含义)。现在-因为您的代码调用服务器上的代码,所以您希望它告诉您何时完成,并且您希望对其结果进行处理。它通过调用回调函数来实现


当被调用函数完成时,它告诉您它已经完成的标准方法是您告诉它在代码中调用函数。这就是回调函数,它的任务是处理您所调用的较低级别函数的结果/输出。

回调是API的使用者提供的函数,API可以反过来调用(回调)。如果我安排了医生的预约,我可以给他们我的电话号码,这样他们就可以在前一天给我打电话确认预约。回拨是这样的,除了电话号码之外,它可以是任意的指令,比如“在这个地址给我发一封电子邮件,也可以打电话给我的秘书,让她把它放在我的日历上。”

回调通常用于异步操作的情况。如果需要调用函数并立即继续工作,您不能坐在那里等待其返回值告诉您发生了什么,因此您提供了回调。当函数完成其异步工作后,它将使用一些p调用您的回调重新确定的参数(通常一些是您提供的,一些是关于您请求的异步操作的状态和结果)

如果医生不在办公室,或者他们仍在按计划工作,而不是让我等他回来(可能需要几个小时),我们会挂断电话,一旦预约安排好了,他们就会给我打电话


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

您的意思是“在当时”而不是“只要”?我的意思是“尽快”“,就像我引用的文档一样--让我编辑以修复,谢谢!你能重新发布演示链接吗?@AlexMartelli,演示链接不起作用。这得到了我的大力支持(尽管仍然与任何其他支持相同),这是一个非常容易理解的类比,可能对初学者或任何熟悉此技术的人都有帮助。这对初学者来说是一个很好的解释,它只缺少一件事——一个示例代码。既然初学者已经知道了它是什么,请给我们一个简单的例子,说明使用模拟函数名ea:
callDoctor()callPatientBack()
等会是什么样子