es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se definen las llamadas remotas en Julia?

Por favor, guíame en la definición de la función de llamada remota:

log:

[root@srvr0 ~]# julia -p 4
               _
   _       _ _(_)_     |  Documentación: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Escribe "?" para obtener ayuda, "]?" para obtener ayuda de Pkg.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Versión 1.6.4 (2021-11-19)
 _/ |\__'_|_|_|\__'_|  |  Versión oficial https://julialang.org/
|__/                   |

julia>

julia> using Distributed;

julia> r = remotecall(2, ones, 2, 2)
ERROR: MethodError: no se encontró el método remotecall(::Int64, ::typeof(ones), ::Int64, ::Int64)
Candidatos más cercanos:
  remotecall(::Any, ::Distributed.LocalProcess, ::Any...; kwargs...) en /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/remotecall.jl:357
  remotecall(::Any, ::Distributed.Worker, ::Any...; kwargs...) en /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/remotecall.jl:363
  remotecall(::Any, ::Integer, ::Any...; kwargs...) en /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/remotecall.jl:376
  ...
Stacktrace:
 [1] top-level scope
   @ REPL[2]:1

julia> fetch(r)
ERROR: UndefVarError: r no está definido
Stacktrace:
 [1] top-level scope
   @ REPL[3]:1
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para definir una función de llamada remota en Julia, puedes utilizar la función remotecall del módulo Distributed. La función remotecall toma los siguientes argumentos:

    • p: El ID del proceso en el cual ejecutar la función.
    • f: La función que se ejecutará de forma remota.
    • args...: Cualquier argumento para pasar a la función.

    Por ejemplo, para definir una función de llamada remota que llame a la función ones() en el proceso 2 con los argumentos 2 y 2, puedes utilizar el siguiente código:

    using Distributed
    
    # Iniciar 4 procesos trabajadores
    addprocs(4)
    
    # Definir una función de llamada remota
    function remote_ones()
      r = remotecall(2, ones, 2, 2)
      fetch(r)
    end
    
    # Llamar a la función remota e imprimir el resultado
    resultado = remote_ones()
    println(resultado)
    

    Este código iniciará 4 procesos trabajadores, definirá una función remote_ones() que ejecuta ones() en el proceso 2 con los argumentos 2 y 2, y luego llamará a la función e imprimirá el resultado.

Comments are closed.