gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:46:46 24 4
gpt4 key购买 nike

我正在通过 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 开始触及极限

enter image description here

编写这些文件的目的是将它们以 1000 个批次发送到 Dropbox,因为 Dropbox 上传 session 一次支持 1000 个图像。

有没有更好的方法将图像写入磁盘?也许在内存中,但我不知道,任何帮助都会很棒,而且此操作正在 Cuda GPU machine 上完成。但我不确定如何将 GPU 用于此目的。

这个过程是用户定义的。用户可以要求少于/多于 1000 张图像,这些图像可以是一个或多个 Task.async_stream

最佳答案

一种可能的 Elixir 方法

我是 Elixir 的新手,但您可以尝试使用 ETS表将它们暂时写入内存,但不要忘记按照链接建议使用 GenServer 包装它。所以本教程是针对键/值缓存的,我认为您可以轻松适应您的用例。

磁盘方法

Is there any better way to write images to disk?



Linux 操作系统有 ram disks :

RAM disk is also known as RAM drive. It’s a portion of your RAM that are formated with a file system. You can mount it to a directory on your Linux system and use it as a disk partition.



如何在任何 Linux 发行版中创建 RAM 磁盘

从链接的文章中,我为您提取了主要步骤...

创建一个目录:
sudo mkdir /tmp/ramdisk

使用设备名称 myramdisk 挂载它并使用 tmpfs具有 10GB 内存磁盘空间的文件系统:
sudo mount -t tmpfs -o size=10G myramdisk /tmp/ramdisk

NOTE: Adjust the 10G to your needs and available memory on your server.



检查它是否已安装:
mount | tail -n 1

您可以随时取消它以回收内存:
sudo umount /tmp/ramdisk/

通过添加到 /etc/fstab 在系统启动时自动挂载它:
myramdisk  /tmp/ramdisk  tmpfs  defaults,size=10G,x-gvfs-show  0  0

基准测试

测试写入速度:
sudo dd if=/dev/zero of=/tmp/ramdisk/zero bs=4k count=100000

测试读取速度:
sudo dd if=/tmp/ramdisk/zero of=/dev/null bs=4k count=100000

关于elixir - 在 Elixir 中使用 Task.async_stream 将 1K 图像写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62083520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com