本文整理汇总了Python中ThreadPool.ThreadPool.wait_all_complete方法的典型用法代码示例。如果您正苦于以下问题:Python ThreadPool.wait_all_complete方法的具体用法?Python ThreadPool.wait_all_complete怎么用?Python ThreadPool.wait_all_complete使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ThreadPool.ThreadPool
的用法示例。
在下文中一共展示了ThreadPool.wait_all_complete方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Spider
# 需要导入模块: from ThreadPool import ThreadPool [as 别名]
# 或者: from ThreadPool.ThreadPool import wait_all_complete [as 别名]
class Spider(object):
unvisited_urls = dict() # 存储未访问列表
visited_urls = dict()
task_queue = Queue() # 任务队列
def __init__(self, seed):
self.unvisited_urls = seed
self.gather = Gather()
self.url = ''
self.pool = ThreadPool(self.task_queue, 2) # 启动4个线程
self.lock = threading.Lock() # 初始化锁
'''
start 从未访问url列表中取出一条未访问过的url,与run一起打包放到任务队列中
'''
def start(self):
# 在这里读取配置文件
for key in self.unvisited_urls:
self.task_queue.put((self.run, key))
self.pool.wait_all_complete()
# 在这里把已完成队列和未完成队列写入文件中。
def run(self, url, *, save_dir, name): # 工作线程,下载网页,保存网页,提取新的链接,线程需要提供编号,以便存储(命名参数)
# time.sleep(5) # 防止ip被封
result = self.gather.download_webpage(url) # 下载网页
if forbidden_count >= 50: # 结束整个程序
print("exit function")
return False
if result[0] and self.gather.doc_save(result[1], save_dir, name): # 保存网页
self.visited_urls[url] = True # 标记为已经访问过的网址
new_url = self.gather.extra_urls(result[1]) # 提取新的url
self.lock.acquire()
for u in new_url: # 如果该链接既没有访问过,也不存在于待访问列表中,添加网址,这里在多线程中不安全
if not self.visited_urls.get(u) and not self.unvisited_urls.get(u):
# print("%s add" % u)
self.unvisited_urls[u] = True
self.task_queue.put((self.run, u))
print("任务队列大小:%d" % self.task_queue.qsize())
print("已完成任务量:%d" % len(self.visited_urls))
self.lock.release()
self.lock.acquire()
self.unvisited_urls.pop(url) # 在未访问列表中删除该网址
self.lock.release() # 释放
print()
return True