在我的程序中,在读取CSV文件中的每一行之后,会生成一个新进程以下载该图像并将其保存到文件系统:
defmodule Downloader.CLI do
alias Downloader.Parser
alias Downloader.Getter
def main(_args \\ []) do
Enum.map(Parser.run, fn(line) ->
line -> handle_download(line)
end)
end
defp handle_download({ :ok, %{ "image_id" => image_id } }) do
pid = spawn(Getter, :run, [])
send(pid, {self(), image_id})
receive do
:ok -> nil
err -> IO.inspect(err)
end
end
end
Run Code Online (Sandbox Code Playgroud)
如果此CSV文件包含1000个图像,则VM中将创建1000个不同的elixir进程.如果这些进程中只有一个抛出异常,则不会继续其他进程.也就是说,可执行文件不会冻结,但不会下载其他图像.
为什么会这样?如果其他进程彼此独立,为什么不能继续执行?我想错过一些简单的东西,但我在其他任何地方都找不到它.