Pergunta

Em Python Paralelo tem algo no enviar função chamada ligar de volta (documentação), no entanto, não parece explicá-lo muito bem.Postei no fórum deles há alguns dias e não recebi resposta.Alguém poderia explicar o que é um retorno de chamada e para que serve?

Obrigado.

Foi útil?

Solução

Um retorno de chamada é uma função fornecida pelo consumidor de uma API que a API pode então ativar e invocar (chamando você de volta).Se eu marcar uma consulta com o Dr., posso fornecer meu número de telefone para que eles possam me ligar no dia anterior para confirmar a consulta.Um retorno de chamada é assim, exceto que em vez de ser apenas um número de telefone, podem ser instruções arbitrárias como "envie-me um e-mail neste endereço e também ligue para minha secretária e peça para ela colocar isso em minha agenda".

Os retornos de chamada são frequentemente usados ​​em situações em que uma ação é assíncrona.Se você precisar chamar uma função e continuar trabalhando imediatamente, não poderá ficar parado esperando que seu valor de retorno informe o que aconteceu, então você fornece um retorno de chamada.Quando a função terminar completamente seu trabalho assíncrono, ela invocará seu retorno de chamada com alguns argumentos predeterminados (geralmente alguns que você fornece e alguns sobre o status e o resultado da ação assíncrona que você solicitou).

Se o Dr.está fora do escritório, ou eles ainda estão trabalhando no horário, em vez de me fazer esperar até ele voltar, o que pode levar várias horas, desligamos e, uma vez agendada a consulta, eles me ligam.

Neste caso específico, a função submit do Parallel Python invocará seu retorno de chamada com quaisquer argumentos que você fornecer e o resultado de func, uma vez func terminou a execução.

Outras dicas

O local relevante nos documentos:

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

Portanto, se você deseja que algum código seja executado assim que o resultado estiver pronto, você coloca esse código em uma função e passa essa função como o callback argumento. Se você não precisar de outros argumentos, será apenas, por exemplo:

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

Para mais informações sobre callback padrão em python, veja, por exemplo, minha apresentação aqui.

Olhando para o link, parece um gancho chamado.

Retorno de chamada - Função de retorno que será chamado com a lista de argumentos igual a chamadas de chamadas+(resultado) assim que o cálculo for feito

O bit "Assim que o cálculo é feito" parece ambíguo. O ponto, até onde posso ver dessa coisa, é que o submit() A chamada distribui o trabalho para outros servidores e depois retorna. Como o acabamento é assíncrono, em vez de bloquear, ele permite fornecer uma função chamada quando alguma unidade de trabalho termina. Se você fizer:

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

Em seguida, envie vai garantir work_finished() é chamado quando a unidade de trabalho distribuída é concluída no servidor de destino.

Quando Você ligar submit() você pode fornecer um ligue de volta que é chamado no mesmo tempo de execução que o chamador de submit() ... e é chamado após a conclusão da distribuição da função de carga de trabalho.

É como "Call Foo (x, y) quando você fizer algumas coisas em submeter ()"

Mas sim, a documentação pode ser melhor. Tenha um GANDERS na fonte do Ppython e veja em que ponto o retorno de chamada é chamado submit()

UMA ligue de volta é uma função que você define que mais tarde é chamada por uma função que você chama.

Como exemplo, considere como o AJAX funciona: você escreve código que chama uma função do servidor de back-end. Em algum momento no futuro, ele retorna dessa função (o "A" significa assíncrono, que é o que é o "paralelo" em "Python paralelo"). Agora - porque seu código chama o código no servidor, você deseja que ele diga quando estiver pronto e deseja fazer algo com seus resultados. Faz isso ligando para o seu função de retorno de chamada.

Quando a função chamada é concluída, a maneira padrão para dizer que é feita é para você pedir para chamar uma função no seu código. Essa é a função de retorno de chamada, e seu trabalho é lidar com os resultados/saída da função de nível inferior que você chamou.

Um retorno de chamada é simplesmente uma função. No Python, as funções são apenas mais objetos e, portanto, o nome de uma função pode ser usado como uma variável, assim:

def func():
    ...

something(func)

Observe que muitas funções que aceitam um retorno de chamada como argumento geralmente exigem que o retorno de chamada aceite certos argumentos. Nesse caso, a função de retorno de chamada precisará aceitar uma lista de argumentos especificados no callbackargs. Não estou familiarizado com o Python paralelo, então não sei exatamente o que ele quer.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top