需要帮助,以尽量减少浪费的数据收集时间

时间:2019-07-10 13:21:49

标签: python multithreading web-scraping parallel-processing process

我正在尝试提出最佳方法,以最大程度减少我正在构建的数据收集应用程序中的时间损失。以下是一些限制/因素:

  • 我只能每12秒钟在特定频道上查询数据
  • 我可以同时连接到多个频道。
  • 我希望将使用的频道数保持在最低水平

考虑到这些因素,我想到了一个解决方案,但希望获得更多的投入。

我已决定以某种方式负载平衡此数据收集。我的想法是这样的:

  • 主程序使用m个进程(目前我在想4个进程)。
  • 每个进程使用n个线程,每个线程在一个通道上侦听。(现在我在想12)。
  • 有一个变量thread_start_time_factor = 12 seconds / n threads
  • 有一个变量process_start_time_factor = thread_start_time_factor / m processes
  • 每个线程查询的数据每12秒一次,但是线程基于thread_start_time_factor依次开始。因此,如果我使用的是12个线程,则线程1开始((暂停1秒),线程2开始,...)这种方式现在每1秒钟进行一次数据收集。
  • 然后,每个进程根据 process_start_time_factor

从理论上讲,每process_start_time_factor就进行一次数据收集应该。如果采用上述配置,则process_start_time_factor应该为.250秒。 (如果我的逻辑是错误的,请告诉我)。

现在这是我的问题。这是的方法吗?我对使用多个进程的想法是实质上在其他进程未捕获时捕获数据。该程序将用Python编写(并不重要)。有没有人遇到过这样的(怪异)数据收集限制的经验,他们必须在框外思考?感谢所有提前答复的人。我肯定可以接受其他解决方案。

1 个答案:

答案 0 :(得分:0)

假设您使用的是代理服务器,但未链接到该站点,并且对该问题有些晦涩,则表明该问题与非法行为接壤

也就是说,您尚未提供的一些数字是每个请求花费的时间(例如TTFB,总持续时间,传输的总数据)以及处理响应所需的时间。

假设您在入口处没有进行太多处理,那么我将采用asyncio(即无进程/线程并行性)方法,因为这样可以更轻松地进行协调。多线程/进程协调很难理解

您应该能够通过单个线程的HTTP请求使1GB的连接饱和,也许只是使用多个进程进行后处理,以免造成障碍