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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值