Вопрос

В Параллельный Python в нем есть что-то такое в Отправить функция, вызываемая обратный вызов (Документация) однако, похоже, это не слишком хорошо объясняет это.Я разместил сообщение на их форуме пару дней назад и не получил ответа.Не мог бы кто-нибудь объяснить, что такое обратный вызов и для чего он используется?

Спасибо.

Это было полезно?

Решение

Обратный вызов - это функция, предоставляемая потребителем API, которую API затем может развернуть и вызвать (вызывая вас обратно).Если я записываюсь на прием к врачу, я могу дать им свой номер телефона, чтобы они могли позвонить мне накануне, чтобы подтвердить назначение.Обратный звонок похож на этот, за исключением того, что вместо простого телефонного номера это могут быть произвольные инструкции типа "отправьте мне электронное письмо по этому адресу, а также позвоните моей секретарше и попросите ее занести это в мой календарь.

Обратные вызовы часто используются в ситуациях, когда действие является асинхронным.Если вам нужно вызвать функцию и немедленно продолжить работу, вы не можете сидеть и ждать, пока ее возвращаемое значение сообщит вам, что произошло, поэтому вы предоставляете обратный вызов.Когда функция полностью выполнит свою асинхронную работу, она вызовет ваш обратный вызов с некоторыми заранее определенными аргументами (обычно некоторые вы предоставляете, а некоторые - о статусе и результате запрошенного вами асинхронного действия).

Если докторего нет в офисе, или они все еще работают по расписанию, вместо того чтобы заставлять меня ждать на удержании, пока он не вернется, что может занять несколько часов, мы вешаем трубку, и как только встреча назначена, они звонят мне.

В этом конкретном случае функция отправки Parallel Python вызовет ваш обратный вызов с любыми указанными вами аргументами и результатом 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, см., например,моя презентация здесь.

Глядя на ссылку, просто выглядит как хук, который вызывается.

обратный вызов - функция обратного вызова, которая будет вызвана с аргументом список, равный callbackargs+(результат,) как только вычисление будет выполнено

Бит "как только вычисление будет выполнено" кажется двусмысленным.Суть, насколько я могу судить об этой вещи, заключается в том, что submit() вызов распределяет работу на другие серверы, а затем возвращается.Поскольку завершение является асинхронным, а не блочным, это позволяет вам предоставить функцию, которая вызывается, когда завершается какая-либо единица работы.Если вы это сделаете:

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

Затем submit обеспечит work_finished() вызывается, когда единица распределенной работы завершена на целевом сервере.

Когда ты позвонишь submit() вы можете предоставить обратный вызов который вызывается в той же среде выполнения, что и вызывающий submit() ...и она вызывается после завершения распределения функции рабочей нагрузки.

Что-то вроде "вызовите foo(x, y), когда вы кое-что сделали в submit()"

Но да, документация могла бы быть лучше.Найдите ganders в исходном коде ppython и посмотрите, в какой момент вызывается обратный вызов submit()

A обратный вызов это функция, которую вы определяете, которая позже вызывается функцией, которую вы вызываете.

В качестве примера рассмотрим, как работает AJAX:вы пишете код, который вызывает внутреннюю серверную функцию.В какой-то момент в будущем он возвращается из этой функции (буква "A" означает "Асинхронный", что и означает "Параллельный" в "Parallel Python").Теперь - поскольку ваш код вызывает код на сервере, вы хотите, чтобы он сообщал вам, когда это будет сделано, и вы хотите что-то сделать с его результатами.Он делает это, вызывая ваш функция обратного вызова.

Когда вызываемая функция завершается, стандартный способ сообщить вам, что это сделано, - это указать ей вызвать функцию в вашем коде.Это функция обратного вызова, и ее задача состоит в обработке результатов / выходных данных вызванной вами функции более низкого уровня.

Обратный вызов - это просто функция.В Python функции - это просто дополнительные объекты, и поэтому имя функции можно использовать как переменную, например:

def func():
    ...

something(func)

Обратите внимание, что многие функции, которые принимают обратный вызов в качестве аргумента, обычно требуют, чтобы обратный вызов принимал определенные аргументы.В этом случае функции обратного вызова необходимо будет принять список аргументов, указанных в callbackargs.Я не знаком с Parallel Python, поэтому я не знаю точно, чего он хочет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top