gpt4 book ai didi

ruby - 如何在处理文件时在 ruby​​ 中同时运行多个线程?

转载 作者:可可西里 更新时间:2023-11-01 10:01:01 25 4
gpt4 key购买 nike

今天我一直在研究 Ruby 和线程。我有一个要检查的代理列表。假设 10 秒的超时通过一个非常大的代理列表将花费很多小时,如果我写这样的东西:

  proxies.each do |proxy|
check_proxy(proxy)
end

我试图找出线程的第一个问题是如何同时启动多个线程。我在网上找到了一小段简洁的代码:

for page in pages
threads << Thread.new(page) { |myPage|

puts "Fetching: #{myPage}\n"
doc = Hpricot(open(myPage.to_s)).to_s
puts "Got #{myPage}: #{doc.size}"
}
end

就同时启动它们而言,似乎工作得很好。所以现在我可以...开始同时检查所有 7000 条记录?

我如何转到一个文件,为每个线程取出一行,运行一批大约 20 个并重复该过程?

我能否运行一个 while 循环同时启动 20 个线程(从文件中删除行)并一直运行直到文件为空?

我对我应该做的事情的逻辑有点软弱。

谢谢大家!

附言。

另一个想法:如果20个 worker 不停地乱搞,会不会有文件访问问题?如果是这样,有什么好的解决方法?

最佳答案

您搜索的关键字是threadpool .您可以尝试为 Ruby 找一个(我相信 Github 上至少有几个),或者自己动手。

Here's SO 上的简单实现。

回复:文件访问,IMO 你不应该让工作人员直接更改文件,而是在你的主线程中进行。您不希望在那里同时进行编辑。

关于ruby - 如何在处理文件时在 ruby​​ 中同时运行多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307174/

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