python 爬虫 ----- 提高爬取效率 异步(多进程、多线程、携程)
![](https://img2022.cnblogs.com/blog/2986763/202210/2986763-20221029160629426-1372958347.png)
进程是资源单位
线程是执行单位
多线程:
第一种方法:
from threading import Thread #导入线程包
t = Thread(target = 任务) # 创建线程并安排任务
t.start() # 将线程状态表示为可以开始,具体时间由CPU决定
注意:创建多线程时,想要区分子线程,可以在Thread()中,使用args=()给线程命名,但是传递的参数必须为元组,所以在只有单个参数的时候,需要格外加“,”,确保该参数是元组而不是字符串
第二种方法:
1.声明Thread类:MyThead
在MyThead中创建任务run()
2.在主函数中定义一个MyThead类:t
t.start() # 开启线程
多进程
from multiprocessing import Process # 导包
p = Process(target=任务)
p.start()
第二种方法:
1.声明Process类:MyProcess
在MyProcess中创建任务run()
2.在主函数中定义一个MyProcess类:t
t.start() # 开启线程
线程池与进程池:(反复利用线程,节约资源)
线程池:一次性开辟一些线程,我们直接给线程池提交任务,线程任务的调度交给线程池自己完成
1.导入线程池与进程池模块
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
2.创建线程池
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def fn(name): for i in range(1000): print(name, i) if __name__ == '__main__': # 创建线程池 with ThreadPoolExecutor(50) as t: for i in range(100): t.submit(fn, name=f"线程{1}") #submit()里面是 任务+ 任务需要的参数值 # with 以外的会等待线程池中的任务全部执行完成,才继续执行(守护机制) print("123")
hello my world
本文来自博客园,作者:slowlydance2me,转载请注明原文链接:https://www.cnblogs.com/slowlydance2me/p/16839079.html