使用parfor进行许多Web请求

我的同事让我访问一个网络服务器上的所有页面,以便填充它的缓存。我计划使用parfor及时浏览超过25万页。我还需要不要开得太快,以免服务器超载。

我使用parfor这是一种罕见的情况,您可以使用更多的MATLAB工作者,而不是可用的物理或甚至逻辑处理器,这通常是不推荐的。它能工作是因为网络请求需要大量的等待,通常我需要在MATLAB中做的处理很少。

我承认这个视频在接近尾声的时候有点无聊,因为我尝试了不同数量的工人。请记住,您可以在播放器的右下角提高视频的播放速度。

本文涉及的特性代码风格包括:视频

  • parfor

跟我来(@stuartmcgarrity),如果你想在我发帖时通过Twitter得到通知。

全屏模式播放视频,获得更好的观看体验。最终代码如下:

%%请求url集合

%假设电子表格中有一个"url "变量/列
pagesFileName = " FILEPATH \ all-aem-pages.xlsx”;
环境=(“dev2”“dev3”);
环境=环境(2);
选择= weboptions(“超时”,60);
totalStartTime =时钟;
%%获取页面列表
如果已在基本工作区中,则重用表
如果~存在(“页”、“var”)
页面= readtable (pagesFileName TextType, '字符串');
结束
%%创建url列表
%转换环境
url =取代(pages.urls”。Mathworks ","-" + environment + ".mathworks");
% %开始工人
% 12用于开发服务器
startPool (12);
% %发出请求
成功= false(高度(页面),1);
parfor k = 1:高度(页面)
开始时间= [];parfor的初始化
url = url (k);
试一试
开始时间=时钟;
内容= webread (url选项);
成功(k) = true;
fprintf('成功访问(%d of %d): %s(%2.1f sec).\n',k,height(pages),url,etime(clock,startTime));

fprintf('Failed access (%d of %d): %s(%2.1f sec).\n',k,height(pages),url,etime(clock,startTime));
结束
结束

% %完成
流(完成%年代\ n, myETimeStr (totalStartTime))

% %本地函数
函数p = startPool (numWorkers)
p = gcp(“nocreate”);
如果isempty (p)
p = parpool (numWorkers);
elseif p.NumWorkers ~ = numWorkers
删除(p);
p = parpool (numWorkers);
结束
结束

函数y = myETimeStr(开始时间)
%以秒为单位返回一个字符串(mm:ss)。

y = char(持续时间(0,0,结束(时钟,开始时间),“格式”,“mm: ss”));

结束

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。