gpt4 book ai didi

Ruby 并行每个循环

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:09 25 4
gpt4 key购买 nike

我有以下代码:

FTP ... do |ftp| 
files.each do |file|
...
ftp.put(file)
sleep 1
end
end

我想在单独的线程或某种并行方式中运行每个文件。执行此操作的正确方法是什么?这是对的吗?

这是我对 parallel gem 的尝试

FTP ... do |ftp| 
Parallel.map(files) do |file|
...
ftp.put(file)
sleep 1
end
end

并行的问题是 puts/outputs 可以像这样同时发生:

as = [1,2,3,4,5,6,7,8]
results = Parallel.map(as) do |a|
puts a
end

我怎样才能强制执行看跌期权,就像它们通常是行分隔的一样。

最佳答案

并行化的全部意义在于同时运行。但是,如果流程的某些部分您想按顺序运行某些代码,您可以使用 mutex,例如:

semaphore = Mutex.new
as = [1,2,3,4,5,6,7,8]
results = Parallel.map(as, in_threads: 3) do |a|
# Parallel stuff
sleep rand
semaphore.synchronize {
# Sequential stuff
puts a
}
# Parallel stuff
sleep rand
end

您会看到它可以正确打印内容,但不一定以相同的顺序打印。我使用 in_threads 而不是 in_processes (默认),因为 Mutex 不适用于进程。如果您确实需要流程,请参阅下面的替代方案。

引用资料:

关于Ruby 并行每个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22797596/

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