使用Elixir中的Task.async_stream将1K图像写入磁盘

问题描述 投票:1回答:1

我正在通过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 gpu
1个回答
0
投票

一种可能的长生不老药方法

我是Elixir的新手,但是您可以尝试使用ETS表将它们临时写入内存,但不要忘记按照链接建议将其包装到GenServer中。因此,本教程适用于键/值缓存,我认为这很容易使您适应您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.