0

我们有一个巨大的不同 url 文件(~500K - ~1M urls)。
我们希望使用 Grinder 3 将这些 url 分配给 Workers,这样每个 worker 都会调用一个不同的 url。

在 JY 脚本中,我们可以:

  • 每个代理读取一次文件

  • 为每个代理分配行号范围

  • 每个 Worker 都会根据其代理行号范围中的 run-id 获取一个 line/url。

这仍然意味着将一个巨大的文件加载到内存中,并为可能对许多人来说很常见的问题编写一些代码。

对更简单/现成的解决方案有任何想法吗?

4

2 回答 2

0

不久前,我以类似的方式使用了 Grinder,并编写了一个用于多线程、一次性从大文件中提取 URL 的实用程序。

请参阅https://bitbucket.org/travis_bear/file_util - 特别是顺序阅读器。

我建议split在执行 Grinder 运行之前使用命令行实用程序(或类似实用程序)为每个代理提供单独的主文件块。

于 2016-02-18T01:56:15.907 回答
0

如果您愿意,我会采取不同的方法,因为它是一个巨大的文件,您计划生成多少线程。相信你已经知道可以通过 Grinder.ThreadNo 来获取当前正在执行的线程。实际上,您可以使用具有相同数量记录的预处理器将文件划分为线程数,并将它们命名为 0 、 1 、2 等与线程名称匹配。

为什么我建议这样做是因为处理文件看起来像是一项前置任务,重要的是它的内容。线程执行时文件处理不应干扰。

所以现在每个线程都有自己的文件并且没有冲突。

例如 20 个线程 20 个文件,但是您的线程数应谨慎选择,可能是峰值 + 50%。

于 2016-03-14T15:55:31.940 回答