zoukankan      html  css  js  c++  java
  • 多线程

     1 import time
     2 from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor
     3 
     4 
     5 class ThreadPoolSpider:
     6     executor = ThreadPoolExecutor(max_workers=8)
     7     # executor = ProcessPoolExecutor(max_workers=8)
     8 
     9     def __init__(self):
    10         pass
    11 
    12     def http_request(self, url, second):
    13         time.sleep(second)
    14         return url, second
    15 
    16     def crawl(self):
    17         all_tasks = []
    18         for index in range(100):
    19             task = self.executor.submit(self.http_request, index, 10)
    20             all_tasks.append(task)
    21 
    22         for result in as_completed(all_tasks):
    23             data = result.result()
    24             print(data)
    25 
    26 
    27 if __name__ == '__main__':
    28     spider = ThreadPoolSpider()
    29     spider.crawl()
    ThreadPoolExecutor:线程池
    as_completed()方法是一个生成器,在没有任务完成的时候,会阻塞,在有某个任务完成的时候,会yield这个任务,就能执行for循环下面的语句,然后继续阻塞住,循环到所有的任务结束

  • 相关阅读:
    sharepoint 2010 资料
    调试 SharePoint 解决方案
    定义不同模板的网站集
    作图工具
    struts2的优点
    get load
    什么是java的事物
    session的实现方式
    final 和static的关系
    各种大神的表单验证 感谢大神的辛苦
  • 原文地址:https://www.cnblogs.com/zihkj/p/15770656.html
Copyright © 2011-2022 走看看