【发布时间】:2019-07-10 13:21:49
【问题描述】:
我正在努力想出最好的方法来最大程度地减少我正在构建的数据收集应用程序中的时间损失。以下是一些限制/因素:
- 我只能在特定通道上每 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 应该是 0.250 秒。 (如果我的逻辑在这里是错误的,请告诉我)。
现在这是我的问题。这是一种好的方法吗?我对使用多个进程的想法是基本上在其他进程没有时捕获数据。该程序将用 Python 编写(没关系)。有没有人有过这样的(奇怪的)数据收集限制的经验,他们必须跳出框框思考?感谢所有提前回复的人。我肯定愿意接受其他解决方案。
【问题讨论】:
-
如果你真的可以写一些真正的代码来做这件事并提交给 codereview.stackexchange.com 可能会更好。也就是说,你为什么要使用这么多进程/线程?为什么不只使用两个并在时间用完之前在它们之间交替。还有什么是“频道”,为什么要切换?
-
@SamMason 我不想开始编写任何代码,除非我对此有一个好主意。我正在某个站点上收集数据,我可以每 12 秒发出一次请求,而不受速率限制。因此,每个频道本质上都是一个在代理上运行的网络会话。
-
为什么不和网站管理员聊天呢?如今,未经许可让代码敲击网站通常被认为是不良形式,甚至是非法的
-
@SamMason 我已经阅读了他们的服务条款,它符合我想要做的事情。
标签: python multithreading web-scraping parallel-processing process