python多线程,多进程
1、在使用多线程之前,我们肯定能做到的事是:如何获取单个页面的数据
2、之后再上线程池,多个页面同时抓取
1、多线程
'''
理解线程,进程?
进程是资源单位,每一个进程至少要有一个线程
线程是执行单位
启动每一个程序,默认都会有一个主线程
'''
#多线程
#导入一个线程类的包
from threading import Thread
# def func():
# for i in range(100):
# print("func",i)
#
# if __name__ == '__main__':
# t = Thread(target=func) #创建线程,并给线程安排任务
# t.start() #多线程状态为可以开始工作状态,具体的执行时间由CPU决定
# for i in range(100):
# print("main",i)
#-----------------第二种写法--------------------------
# class MyThread(Thread):
# def run(self):
# for i in range(100):
# print('子线程',i)
#
# if __name__ == '__main__':
# t = MyThread()
# t.start() #开启线程
# for i in range(100):
# print('主线程',i)
#----------------------给线程传递参数:--------------------
def func(name): # 传参??
for i in range(100):
print(name,i)
if __name__ == '__main__':
t1 = Thread(target=func,args=('tp',)) #传递的参数必须是元组
t1.start()
t2 = Thread(target=func,args=('xch',))
t2.start()
2、多进程
在python中,一些模块的使用方法很相似,API大致都是一个,可能就只换了一些包而已。
'''
多进程
'''
from multiprocessing import Process
def func():
for i in range(100):
print("子进程",i)
if __name__ == '__main__':
p = Process(target=func)
p.start()
for i in range(100):
print("主进程",i)
3、线程池
'''
线程池:一次性开辟一些线程,我们用户直接给线程池子提交任务。线程任务的调度交给线程池来完成。
'''
#导入线程池,进程池
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
def fun(name):
for i in range(1000):
print(name,i)
if __name__ == '__main__':
# 创建线程池
with ThreadPoolExecutor(50) as t:
for j in range(100):
t.submit(fun,name=f"线程{j}")
#等待线程池中的任务全部执行完毕,才继续执行(守护)
print("123")