当前位置: 首页>>代码示例>>Python>>正文


Python ThreadPool.wait_all_complete方法代码示例

本文整理汇总了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
开发者ID:scottdwdwdw,项目名称:tinySearch,代码行数:49,代码来源:Spider.py


注:本文中的ThreadPool.ThreadPool.wait_all_complete方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。