如何能有效的将多个网页访问任务 按照一定时间间隔调度?

比如我有1000个网页需要访问,每个页面可能需要5s时间才能访问完成,计划是每秒发起10个.

目前的实现方法是采用线程池,但是遇到一些问题。

1.因为页面访问有延迟为了满足每秒的固定数量请求发起,我需要将线程池的数量设的很大。
例如我现在情况可能需要把线程池大小设置到10*5=50个?
如果我没记错,在线程数量变多的情况下实际上因为上下文切换会造成资源浪费。

2.如何较为精确的发起每秒的任务调度。目前采用的是time.sleep(1)的方式,感觉好搓。

求教
有没更有效可靠的方式实现我的需求?

阅读 2.5k
2 个回答

你说的条件自相矛盾的。

  1. 每个请求的响应的时间不确定。(5秒也只是“可能”,除非你说做了 5s 的 timeout 处理)
  2. 每秒 10 个请求,假设 10 个线程并发,那么因为响应时间不确定,这 10 个线程的释放时间就不确定。
  3. 你又做了一个线程池,限定了总数,因为每个线程释放时间不确定,所有你不可能做到每秒 10 个请求。

所以,你要么

  • 定每秒 10 个请求,不限定线程总数。

要么

  • 定 N 个线程,每秒多少个请求不确定。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题