当前位置: 首页 > news >正文

爬虫学习 异步爬虫(五)

多线程 多进程 协程

进程 运行中的程序
线程 被CPU调度的执行过程,操作系统 运算调度的min单位
在进程之中,进程中实际运作单位

from threading import Thread#创建任务
def func(name):for i in range(100):print(name,i)if __name__ == '__main__':#创建线程t1 = Thread(target = func,args=("一一一",))#Thread() ,必须要求元组t2 = Thread(target = func,args=("二二二",))t1.start()t2.start()
print("我是主线程")
#1个主线程  2个副线程

面向对象方法

from threading import Threadclass MyThread(Thread):def __init__ (self,name):#init 传参super(MyThread,self).__init__()#初始化self.name = namedef run(self): #run方法 -->返回值可不写for i in range(100):print(self.name,i)if __name__ == '__main__':t1 = MyThread("一一一")t2 = MyThread("二二二")t1.start()t2.start()

线程池

from concurrent.futures import ThreadPoolExecutordef func(name):for i in range(10):print(name,i)if __name__ == '__main__':with ThreadPoolExecutor(10) as t:for i in range(100):t.submit (func,f"num{i}")

返回值使用

from concurrent.futures import ThreadPoolExecutordef func(name):for i in range(10):print(name,i)return namedef fn(res):print(res.result())if __name__ == '__main__':with ThreadPoolExecutor(10) as t:for i in range(100):t.submit (func,f"num{i}").add_done_callback(fn)   #返回 即执行 callback函数#顺序不确定

map映射
map返回值 有顺序

from concurrent.futures import ThreadPoolExecutordef func(name):for i in range(10):print(name,i)return namedef fn(res):print(res.result())if __name__ == '__main__':with ThreadPoolExecutor(10) as t:for i in range(100):t.submit (func,f"num{i}").add_done_callback(fn)   #返回   即执行 callback函数   顺序不确定#绑定fn函数   fn 返回值-result()?
if __name__ == '__main__':with ThreadPoolExecutor(10) as t:result = t.map(func,["111","222","333"])for r in result:print(r)# map 返回值为生成器,返回顺序一致

线程池案例

#北京新发地
import  requests
from lxml import etree
from concurrent.futures import ThreadPoolExecutor#线程池f = open("线程池案例.csv","w",encoding="utf-8")def download (url):resp = requests.get(url)tree = etree.HTML(resp.text)tr_list = tree.xpath("//table[@class='hq_table']/tr")for tr in tr_list:td_texts = tr.xpath("./td/text()")s = ",".join(td_texts)f.write(s)f.write('\n')if __name__ =='__main__':with ThreadPoolExecutor(10) as t: #线程池for i in range(1,16964):url = f"http...{i}.shtml"#download(url) 线程池不能这么干t.submit(download,url)
http://www.lryc.cn/news/248927.html

相关文章:

  • 【Openstack Train安装】六、Keystone安装
  • java学习part22包装类
  • 【场景测试用例】二维码
  • 如何提高销售技巧,增加客户的成交率?
  • 软件设计之生成器模式
  • 【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】
  • 【Vulnhub靶机】Jarbas--Jenkins
  • Java面向对象第8天
  • 数据结构与算法复习笔记
  • 关于微服务的思考
  • 计算机毕业设计 基于Web的课程设计选题管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 群晖NAS:docker(Container Manager)、npm安装Verdaccio并常见命令集合
  • 老师旁听公开课到底听什么
  • 一文让你深入了解JavaSE的知识点
  • 人体是否有清除hpv病毒能力?北京劲松HPV诊疗中心提出观点
  • Linux下~目录和home目录的区别
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • 如何实现大数据渲染
  • 【差旅游记】走进新疆哈密博物馆
  • 单片机学习6——定时器/计数功能的概念
  • a-table:表格组件常用功能记录——基础积累2
  • leetCode 131.分割回文串 + 回溯算法 + 图解 + 笔记
  • 浅谈对于Android CMakeLists文件的理解
  • 虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现
  • 【开源】基于Vue+SpringBoot的智能教学资源库系统
  • Sass基础知识之【变量】
  • 云原生系列Go语言篇-泛型Part 1
  • 力扣1089题 复写零 双指针解法
  • Redis基础与运用
  • PTA:猜帽子游戏 ,C语言