因此,我正在编写一个函数,该函数基本上可以批量下载数据并将其保存在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
但这也不能解决问题。以前的问题仍然存在。
如何实现此功能,以便可以一次发出多个下载调用,但也可以同时限制它们(在某种意义上)?
答案 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
由于您的代码不可运行,因此我尚未对其进行测试。有帮助吗?