我试图用从互联网上下载的信息即时填充数据库。我已经在表中有一个id
s 列表。我最初尝试的是获取所有id
s并循环遍历每个sid
并下载相关信息。它起作用了,但是,因为我有超过 1000id
秒,所以大约需要 24 小时。为了加快速度,我尝试创建线程,每个线程都分配了一些id
s 来下载。这里的问题是解释器突然停止并退出。我还想问一下我写的程序是否真的会让我在整体时间上得到一些加速?我写的代码是这样的(我正在使用ruby
):
def self.called_by_thread(start, limit=50, retry_attempts = 5)
last_id = start
begin
@Users = User.where('id > ' + last_id.to_s).limit(limit)
@Users.each do |user|
#called a function to download information of user and store it,
#This function belongs to the user object
last_id = user.id
end
rescue => msg
puts "Something went wrong (" + msg + ")"
if retry_attempts > 0
retry_attempts -= 1
limit -= last_id-start
retry
end
end
end
上面的代码start
是id
从哪里开始的。我这样调用上面的函数:
last_id = 1090
i = 1
limit = 50
workers = []
while i < num_workers
t = Thread.new { called_by_thread(last_id, limit, 5) }
workers << t
i += 1
last_id += limit
end
workers.each do |t|
t.join
end
所有id
的 s 都是增量的,所以它们添加一个正数是没有害处的。保证用户存在于给定的id
. 提供低于10000。