如何使用spawn/4?
How to use spawn/4?
我正在尝试使用 Node.spawn/4
在远程 Elixir 节点上部署一个函数,但我似乎无法管理它。
我已经在 iex 的 Hello 模块中定义了相关函数 (hello world),并尝试使用 Node.spawn(:node2@remote, Hello, :world, [])
.
部署它
iex(node1@local) defmodule Hello do
...(node1@local) def world, do: IO.puts("Hello World)
...(node1@local) end
Node.spawn(:node2@remote, Hello, :world, [])
我希望 spawn/4 将模块 Hello 发送到远程节点,以便在尝试生成它时在那里识别函数 world/0。但是,我收到以下错误:
[error] Error in process #PID<16431.208.0> on node :node2@remote with exit value: {:undef, [{Hello, :world, [], []}]}
您使用的术语让您很难理解您尝试过的内容。
如 :erlang.spawn/4
documentation, this function works in all the aspects exactly as :erlang.spawn/3
所述,除了它在远程节点上执行代码。没有涉及 deploy,不管它是什么意思。远程节点必须为调用者所知并且必须包含要执行的代码。
elixir-lang.org 上有一个很棒的教程 — Distributed tasks and configuration
.
要检查远程节点是否对调用者可见,可以调用 Node.connect/1
。
总结一下。
从两个不同的终端启动两个名为 iex
的会话:
$ iex --sname foo
$ iex --sname bar
从第一个尝试开始:
Node.spawn(:bar@localhost, IO, :puts, ["¡YAY!"])
您应该会看到 "¡YAY!"
已打印出来。要测试您自己的 Hello.world/0
,此函数必须为 目标节点 所知。因此,切换到 :foo@localhost
实例并键入:
defmodule Hello, do: def world, do: IO.puts("¡YAY!")
现在切换到 :bar@localhost
并执行:
Node.spawn(:foo@localhost, Hello, :world, [])
您应该会看到 "¡YAY!"
打印出来。
我正在尝试使用 Node.spawn/4
在远程 Elixir 节点上部署一个函数,但我似乎无法管理它。
我已经在 iex 的 Hello 模块中定义了相关函数 (hello world),并尝试使用 Node.spawn(:node2@remote, Hello, :world, [])
.
iex(node1@local) defmodule Hello do
...(node1@local) def world, do: IO.puts("Hello World)
...(node1@local) end
Node.spawn(:node2@remote, Hello, :world, [])
我希望 spawn/4 将模块 Hello 发送到远程节点,以便在尝试生成它时在那里识别函数 world/0。但是,我收到以下错误:
[error] Error in process #PID<16431.208.0> on node :node2@remote with exit value:
{:undef, [{Hello, :world, [], []}]}
您使用的术语让您很难理解您尝试过的内容。
如 :erlang.spawn/4
documentation, this function works in all the aspects exactly as :erlang.spawn/3
所述,除了它在远程节点上执行代码。没有涉及 deploy,不管它是什么意思。远程节点必须为调用者所知并且必须包含要执行的代码。
elixir-lang.org 上有一个很棒的教程 — Distributed tasks and configuration
.
要检查远程节点是否对调用者可见,可以调用 Node.connect/1
。
总结一下。
从两个不同的终端启动两个名为 iex
的会话:
$ iex --sname foo
$ iex --sname bar
从第一个尝试开始:
Node.spawn(:bar@localhost, IO, :puts, ["¡YAY!"])
您应该会看到 "¡YAY!"
已打印出来。要测试您自己的 Hello.world/0
,此函数必须为 目标节点 所知。因此,切换到 :foo@localhost
实例并键入:
defmodule Hello, do: def world, do: IO.puts("¡YAY!")
现在切换到 :bar@localhost
并执行:
Node.spawn(:foo@localhost, Hello, :world, [])
您应该会看到 "¡YAY!"
打印出来。