1

我试图用从互联网上下载的信息即时填充数据库。我已经在表中有一个ids 列表。我最初尝试的是获取所有ids并循环遍历每个sid并下载相关信息。它起作用了,但是,因为我有超过 1000id秒,所以大约需要 24 小时。为了加快速度,我尝试创建线程,每个线程都分配了一些ids 来下载。这里的问题是解释器突然停止并退出。我还想问一下我写的程序是否真的会让我在整体时间上得到一些加速?我写的代码是这样的(我正在使用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

上面的代码startid从哪里开始的。我这样调用上面的函数:

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。

4

0 回答 0