python爬虫之多任务的了解以及多线程的创建和使用

1.实现多任务的方式 多线程 多进程 协程 多线程+多进程 为什么你能够实现多任务? 并行:同时发起,同时执行(4核,4个任务) 并发:同时发起,单个执行 在python语言中,并不能够正真意义上实现多线程,因为CPython解释器 有一个全局的GIL解释器锁,来保证同一时刻只有一个线程在执行 线程:是cpu执行的一个基本单元,暂用的资源非常少,并且线程和线程之间的资源 是共享的,线程是依赖于进程而存在的,多线程一般适用于I/O密集型操作,线程的 执行是无序的from threading import Thread import threading import time #检测线程之间的资源共享 data = https://www.it610.com/article/[] def download_image(url,num):"""下载图片""" global data time.sleep(2) print(url,num) data.append(num) def read_data(): global data for i in data: print(i) if __name__ == '__main__': #获取当前线程的名称threading.currentThread().name print('主线程开启',threading.currentThread().name) #创建一个子线程 """ target=None,:线程要执行的目标函数 name=None,:创建线程时,指定线程的名称 args=():为目标函数,传递参数,(tuple元组类型) """ thread_sub1 = Thread( target=download_image, name='下载线程', args=('https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=338874098,844915032&fm=200&gp=0.jpg',1) ) thread_sub2 = Thread( target=read_data, name='读取线程', ) # 是否开启守护进程(在开启线程之前设置) # daemon:False,在主线程结束的时候,会检测子线程任务是否结束, #如果子线程中任务没有结束,则会让子线程正常结束任务 # daemon:True 在主线程结束的时候,会检测子线程任务是否结束, # 如果子线程中任务没有结束,则会让子线程跟随主线程一起结束 #thread_sub1.setDaemon(True) #thread_sub1.daemon = True #启动线程 thread_sub1.start() #join():阻塞,等待子线程中的任务执行完毕后,再回到主线程中继续执行 thread_sub1.join() #开启线程 thread_sub2.start() thread_sub2.join() print('主线程结束',threading.currentThread().name)

    推荐阅读