使用限制器批量下载数据

时间:2018-07-11 20:29:21

标签: download julia bulk downloading

因此,我正在编写一个函数,该函数基本上可以批量下载数据并将其保存在db中。 首先,我只是将其表示为

function storedata(url_list)
  for url in url_list
    data = downloaddata(url)
    savedataindb(data)
  end
end

但是这种方式的下载速度非常慢(我猜是数据服务器本身限制了速度) 因此,我将所有下载同步化,以便可以一次发出多个下载呼叫

function storedata(url_list)
  @sync for url in url_list
    @async savedataindb(downloaddata(url))
  end
end

这有效并且可以很快下载。 但是我的url_list很大,因此这对数据服务器的调用太多了,而数据服务器阻止了我。 因此,我想,我将创建一定大小的批处理,以异步方式下载,如下所示

function storedata(url_list)
  batches = divide(url_list)
  @sync for batch in batches
    @async for url in batch
      savedataindb(downloaddata(url))
    end
  end
end

但这也不能解决问题。以前的问题仍然存在。

如何实现此功能,以便可以一次发出多个下载调用,但也可以同时限制它们(在某种意义上)?

1 个答案:

答案 0 :(得分:0)

您的代码不是完全可复制的,但是我认为如果length(batches)很小,那么它应该可以正常工作(例如,当batches集合中的条目数是您要限制异步数的方式时,请求)。

另一方面,如果您将batches的每个条目设置为相同的大小,即length(batch)很小并且已调整到服务器接受的极限,则可以检查:

function storedata(url_list)
  batches = divide(url_list)
  for batch in batches
    @sync for url in batch
      @async savedataindb(downloaddata(url))
    end
  end
end

由于您的代码不可运行,因此我尚未对其进行测试。有帮助吗?