goagent/goagent — pull request #180 by ChenShuang (2013-11-22 07:27:02+00:00)
Title: Control the number of RangeFetch threads automatically.

自动调整range_fetch中fetchlet线程数。

调整策略为：
1. 若抓取数据中发生各种异常（包括range_queue为空，连接错误，返回错误等），则关闭当前线程，除非当前线程数已经超过最小线程数。
2. 若成功抓取到一个数据包，则尝试增加1个新线程。增加概率由这个表达式确定：self.cur_threads + threads_inc <= random.randint(self.threads, self.max_threads) 。即若当前线程个数小于默认线程数，则一定增加新线程，否则增加的概率随着线程数增加而减小。

proxy.ini中关于线程数的三项分别为：
threads：默认线程数，及rangefetch启动时线程数
minthreads：允许的最小线程数，要求>=1，否则当错误发生时有可能所有fetchlet都被停止。
maxthreads：允许的最大线程数，要求>=默认线程数，否则会报错。

为了测试，在输出range_fetch信息的同时我把当前线程数也一并打印到屏幕上了，方便在各种环境下调试。