python 爬虫 ----- 提高爬取效率 异步(多进程、多线程、携程)

 

进程是资源单位

线程是执行单位

 

多线程:

第一种方法:


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")

 

 

 

posted @ 2022-10-29 16:51  slowlydance2me  阅读(147)  评论(0编辑  收藏  举报