【发布时间】:2018-07-17 21:00:54
【问题描述】:
在我的程序中,读取 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
如果此 CSV 文件有 1000 个图像,则在 VM 中创建了 1000 个不同的 elixir 进程。但是,如果这些进程中只有一个抛出异常,则没有其他进程继续。也就是说,可执行文件不会冻结,但不会下载其他图像。
为什么会这样?如果它们彼此独立,为什么其他进程不能继续执行?我想错过一些简单的东西,但我在其他任何地方都找不到。
【问题讨论】: