【发布时间】:2015-06-26 17:59:29
【问题描述】:
我目前在 Elixir 中并行处理列表时遇到问题。并行性的原因是我将结果保存到 API,如果我一次将它们全部炸毁,它会被 DDOS 攻击并关闭。
下面的代码应该分割SQL查询的结果,并在一个单独的任务中处理每一行,当所有任务都完成后,它应该终止。
第一个任务在触发消息后会导致脚本终止。我已经看到他们将接收放在一个函数中并且该函数一遍又一遍地调用自身的答案,但我觉得必须有另一种更好的方法来处理这个问题。
results = Enum.chunk(results, 500)
# Give this process a name
Process.register(self(), :core)
# Loop over the chunks making a process for each
Enum.each results, fn(result) ->
task = Task.async(fn -> Person.App.process(result, "Test", "1") end)
end
# And listen for messages
receive do
{:hello, msg} -> IO.inspect msg
{:world, _} -> "won't match"
end
【问题讨论】:
-
这段代码不再编译
标签: elixir