| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # -*- coding: utf-8 -*-
- """
- -------------------------------------------------
- File Name: ProxyCheck
- Description : 多线程验证useful_proxy
- Author : J_hao
- date: 2017/9/26
- -------------------------------------------------
- Change Activity:
- 2017/9/26: 多线程验证useful_proxy
- -------------------------------------------------
- """
- __author__ = 'J_hao'
- import sys
- from threading import Thread
- try:
- from Queue import Empty # py3
- except:
- from queue import Empty # py2
- sys.path.append('../')
- from Util.utilFunction import validUsefulProxy
- from Manager.ProxyManager import ProxyManager
- from Util.LogHandler import LogHandler
- FAIL_COUNT = 1 # 校验失败次数, 超过次数删除代理
- class ProxyCheck(ProxyManager, Thread):
- def __init__(self, queue, item_dict):
- ProxyManager.__init__(self)
- Thread.__init__(self)
- self.log = LogHandler('proxy_check', file=False) # 多线程同时写一个日志文件会有问题
- self.queue = queue
- self.item_dict = item_dict
- def run(self):
- self.db.changeTable(self.useful_proxy_queue)
- while True:
- try:
- proxy = self.queue.get(block=False)
- except Empty:
- break
- count = self.item_dict[proxy]
- if validUsefulProxy(proxy):
- # 验证通过计数器减1
- if count and int(count) > 0:
- self.db.put(proxy, num=int(count) - 1)
- else:
- pass
- self.log.info('ProxyCheck: {} validation pass'.format(proxy))
- else:
- self.log.info('ProxyCheck: {} validation fail'.format(proxy))
- if count and int(count) + 1 >= FAIL_COUNT:
- self.log.info('ProxyCheck: {} fail too many, delete!'.format(proxy))
- self.db.delete(proxy)
- else:
- self.db.put(proxy, num=int(count) + 1)
- self.queue.task_done()
|