Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing Elixir System.cmd在并行映射中超时出错_Parallel Processing_Elixir - Fatal编程技术网

Parallel processing Elixir System.cmd在并行映射中超时出错

Parallel processing Elixir System.cmd在并行映射中超时出错,parallel-processing,elixir,Parallel Processing,Elixir,我使用Task.async在Elixir中有一个并行映射。我将它与System.cmd一起用于并行ruby rbenv安装ruby版本字符串列表 该脚本运行并安装ruby版本。但是,一旦安装了ruby版本并且出现Task.await timeout错误,它就不会退出该任务 我已经尝试将一个简单的IO.puts函数传递到并行映射中,并正确地执行操作,在工作完成时退出,并且不会引发错误。我在System.cmd中遗漏了什么,以确保在每个rbenv进程完成后结束每个进程 # My parallel m

我使用Task.async在Elixir中有一个并行映射。我将它与System.cmd一起用于并行ruby rbenv安装ruby版本字符串列表

该脚本运行并安装ruby版本。但是,一旦安装了ruby版本并且出现Task.await timeout错误,它就不会退出该任务

我已经尝试将一个简单的IO.puts函数传递到并行映射中,并正确地执行操作,在工作完成时退出,并且不会引发错误。我在System.cmd中遗漏了什么,以确保在每个rbenv进程完成后结束每个进程

# My parallel map
def pmap(collection, func) do
  collection
  |> Enum.map(&(Task.async(fn -> func.(&1) end)))
  |> Enum.map(&Task.await/1)
end

# System.cmd is being passed into the map like this
def parallel_install(ruby_versions) do
  pmap(ruby_versions, &(System.cmd("rbenv", ["install", &1])))
end
有错误的输出:

rbenv: /Users/lewis.jones/.rbenv/versions/2.4.4 already exists
rbenv: /Users/lewis.jones/.rbenv/versions/2.5.1 already exists
rbenv: /Users/lewis.jones/.rbenv/versions/2.1.10 already exists
rbenv: /Users/lewis.jones/.rbenv/versions/2.3.7 already exists
rbenv: /Users/lewis.jones/.rbenv/versions/2.2.10 already exists
** (exit) exited in: Task.await(%Task{owner: #PID<0.73.0>, pid: #PID<0.82.0>, 
ref: #Reference<0.100168651.1374158856.61975>}, 5000)
   ** (EXIT) time out
   (elixir) lib/task.ex:491: Task.await/2
   (elixir) lib/enum.ex:1270: Enum."-map/2-lists^map/1-0-"/2
   (elixir) lib/code.ex:376: Code.require_file/2
Task.await默认超时为5秒。我猜rbenv安装需要更长的时间。您可以增加超时或将其设置为无穷大

300秒:

|> Enum.map(&Task.await(&1, 300_000))
或无限:

|> Enum.map(&Task.await(&1, :infinity))

为什么您首先要通过rbenv安装Ruby版本,并使用名为from Elixir的shell?为了工作中的一些乐趣,谢谢,谢谢。事实证明,rbenv正在等待输入,我需要忽略rbenv:/Users/lewis.jones/.rbenv/versions/2.4.4已经存在。是否继续安装?是/否n@LewisJonesecho'y'| rbenv…@LewisJones可能有一种方法可以用一些标志来确认命令。请尝试使用rbenv install-help或任何打印install帮助的命令,看看是否找到了什么。除非执行shell,否则无法在System.cmd中执行管道。System.cmd比cmd更像exec