我正在通过HTTP请求下载图像,并获得二进制图像,并将其写入文件,例如
File.write(image_with_dir, image, [:binary]) |> File.close
获取HTTP请求然后将其写入磁盘的整个操作在[]中完成]
|> List.flatten() |> Enum.sort() |> Task.async_stream(&(inline_process.(&1, images_directory)), max_concurrency: System.schedulers_online() * 2, timeout: :infinity) |> Stream.run
[降低
max_concurrency
时过程变慢了大约2分钟,System.schedulers_online()
的结果也是8
但使用电流max_concurrency
则更快,但与此相关。磁盘IO开始触及极限
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9VUzRiSy5wbmcifQ==” alt =“在此处输入图像描述”>
写入这些文件的目的是将它们以1000个批次发送到Dropbox,因为Dropbox上载会话一次支持1000张图像。
是否有更好的方法将映像写入磁盘?也许在内存中,但我不知道,任何帮助都会很棒,而且此操作正在Cuda GPU machine
上完成,但我不确定如何将GPU用于此目的。
[我正在通过HTTP请求下载图像,并获得二进制图像,并将其写入File.write(image_with_dir,image,[:binary])等文件|> File.close这整个过程...] >
我是Elixir的新手,但是您可以尝试使用ETS表将它们临时写入内存,但不要忘记按照链接建议将其包装到GenServer中。因此,本教程适用于键/值缓存,我认为这很容易使您适应您的用例。