Подтвердить что ты не робот

Параллельный Python: что такое обратный вызов?

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Соответствующее место в документах:

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 см., например, моя презентация здесь.

Ответ 3

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

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

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

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

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

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

Как будто "назовите foo (x, y), когда вы сделали что-то в submit()"

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

Ответ 4

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

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

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

Ответ 5

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

def func():
    ...

something(func)

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