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

IntPtr просто простая основанная на целом числе структура, которая может содержать указатель (т.е., 32 диаметра долота в 32-разрядных системах, 64-разрядном размере в 64-разрядных системах).

SafeHandle класс, который предназначается для содержания дескрипторов объекта Win32 - он имеет финализатор, который удостоверяется, что дескриптор закрывается, когда объект является GC'ed. SafeHandle абстрактный класс, потому что различные дескрипторы Win32 имеют различные способы, которыми они должны быть закрыты. До введения SafeHandle, IntPtr использовался для содержания дескрипторов Win32, но гарантирование, что их правильно закрыли и препятствовали быть GC'ed, было ответственностью программиста.

HandleRef способ удостовериться, что неуправляемый дескриптор не является GC'ed, когда Вы посреди вызова P/Invoke. Без чего-то как HandleRef, если Ваш управляемый код ничего не делает с дескриптором после вызова P/Invoke, если бы GC был выполнен во время вызова P/Invoke, он не понял бы, что дескриптор все еще использовался, и мог бы GC он. Я воображаю (но я не уверен и не посмотрел), что SafeHandle мог бы использовать HandleRef в качестве части его управления инкапсулированным дескриптором.

45
задан Nope 23 August 2009 в 17:30
поделиться

5 ответов

A callback is a function provided by the consumer of an API that the API can then turn around and invoke (calling you back). If I setup a Dr.'s appointment, I can give them my phone number, so they can call me the day before to confirm the appointment. A callback is like that, except instead of just being a phone number, it can be arbitrary instructions like "send me an email at this address, and also call my secretary and have her put it in my calendar.

Callbacks are often used in situations where an action is asynchronous. If you need to call a function, and immediately continue working, you can't sit there wait for its return value to let you know what happened, so you provide a callback. When the function is done completely its asynchronous work it will then invoke your callback with some predetermined arguments (usually some you supply, and some about the status and result of the asynchronous action you requested).

If the Dr. is out of the office, or they are still working on the schedule, rather than having me wait on hold until he gets back, which could be several hours, we hang up, and once the appointment has been scheduled, they call me.

In this specific case, Parallel Python's submit function will invoke your callback with any arguments you supply and the result of func, once func has finished executing.

169
ответ дан 26 November 2019 в 20:47
поделиться

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

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

г. моя презентация здесь .

г. моя презентация здесь .

18
ответ дан 26 November 2019 в 20:47
поделиться

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

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

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

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

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

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

Что-то вроде "call foo (x, Изучите исходный код ppython и посмотрите, в какой момент вызывается обратный вызов в submit ()

4
ответ дан 26 November 2019 в 20:47
поделиться

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

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

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

3
ответ дан 26 November 2019 в 20:47
поделиться

A callback is simply a function. In Python, functions are just more objects, and so the name of a function can be used as a variable, like so:

def func():
    ...

something(func)

Note that many functions which accept a callback as an argument usually require that the callback accept certain arguments. In this case, the callback function will need to accept a list of arguments specified in callbackargs. I'm not familiar with Parallel Python so I don't know exactly what it wants.

1
ответ дан 26 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: