我有一个包含数百万行的文件,需要处理。文件的每一行都将导致HTTP调用。我正在尝试找出解决问题的最佳方法。
我显然可以读取文件并按顺序进行调用,但是速度会非常慢。我想并行化这些调用,但是不确定是否应该将整个文件读入内存(不是我的忠实拥护者)还是尝试并行化文件的读取(我想我不确定是否有道理)。
只是在这里寻找一些解决问题的最佳方法的想法。如果有一个类似的现有框架或库,我也很乐意使用它。
谢谢。
我想并行化调用,但是不确定是否应该将整个文件读入内存
您应该使用ExecutorService
与bounded的BlockingQueue
。在读入百万行时,您将作业提交到线程池,直到作业BlockingQueue
满为止。这样,您将能够同时运行100个(或最佳数量)的HTTP请求,而无需事先读取文件的所有行。
RejectedExecutionHandler
如果队列已满,您将需要设置一个阻止的对象。这比调用方运行处理程序更好。
BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100);
// NOTE: you want the min and max thread numbers here to be the same value
ThreadPoolExecutor threadPool =
new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, queue);
// we need our RejectedExecutionHandler to block if the queue is full
threadPool.setRejectedExecutionHandler(new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
try {
// this will block the producer until there's room in the queue
executor.getQueue().put(r);
} catch (InterruptedException e) {
throw new RejectedExecutionException(
"Unexpected InterruptedException", e);
}
}
});
// now read in the urls
while ((String url = urlReader.readLine()) != null) {
// submit them to the thread-pool. this may block.
threadPool.submit(new DownloadUrlRunnable(url));
}
// after we submit we have to shutdown the pool
threadPool.shutdown();
// wait for them to complete
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
...
private class DownloadUrlRunnable implements Runnable {
private final String url;
public DownloadUrlRunnable(String url) {
this.url = url;
}
public void run() {
// download the URL
}
}
我举了以下例子: 我为Profile类创建了复杂的模型管理器,并且我构建了一个视图来列出大量的人。我试图计算数据库中的所有内容,所以我想从PersonQuerySet调用配置文件管理器。 为此,我需要做如下工作: 然后我应该能够从SQL检索person.profile.computed_revenue,函数“with_computed_revenue”是注释computed_revenue的Pro
问题内容: 如果用户查看我的JavaScript文件,复制函数的内容并使用AJAX向我的服务器发送请求,会发生什么情况?有没有办法适当地防止这种情况的发生? 问题答案: 防止这种情况发生的方法与针对 任何 Web请求采取的保护方法没有什么不同。您这样做是为了使您的站点需要某种形式的身份验证(即用户必须登录),并且如果请求未正确身份验证,则不要执行任何操作。 通常,当您发出AJAX请求时,cooki
使用AudioSource VOICE_UPLINK和Voice_Downlink成功录制的任何一个呼叫。 还有一个问题:-当音频源VOICE_CALL不工作时,它有什么用? 谢谢你。
我在调用我的onLeScan时遇到问题。我在开始扫描中放置了一个标签,每次都会被调用。出于某种原因,我的onLeScan永远不会被调用。有人看到我所做的有问题吗?onLeScan应该在开始扫描后立即调用,对吗? 编辑更改了我的onLeScan函数。仍然不起作用,但我认为我正在走向正确的道路。DeviceBeacon是一个只包含方法的类:getName()、getSignal()和getAddres
1、接口声明 如果您希望在自己的CRM系统嵌入呼叫中心能力,需要对接智齿呼叫中心能力,在对接前请您阅读如下对接流程,以便您更好的完成对接。如果只对接基本呼叫能力,预计对接及调试过程1周左右即可完成。 第一步:获取第三方用户接口调用唯一凭证 请联系您的售后经理,获取您企业的如下信息: 1、companyid(企业id) 2、appid(第三方用户接口调用唯一凭证id) 3、app_key(第三方用户