前言:
如今大家对“python 多线程模块”大体比较珍视,你们都需要知道一些“python 多线程模块”的相关知识。那么小编也在网摘上汇集了一些对于“python 多线程模块””的相关内容,希望兄弟们能喜欢,我们快快来了解一下吧!第八章:爬虫进阶-多线程爬虫(1)多线程爬虫和threading模块A:多线程爬虫
有些时候,比如下载图片,如果用上述讲解中那种同步的方式进行,那么效率会十分低下。这个时候我们就可以考虑使用多线程的方式来实现
多线程是为了同步完成多项任务,通过提高资源利用率来实现系统的效率,线程是在同一时间需要完成多项任务的时候实现的。
线程离开进程是不能的,一个进程可以有多个线程
B:threading模块
threading模块是python中专门用来做多线程编程的模块,其中最为常用的就是Thread类。
首先来看非多线程的,如下如果只有一个线程那么,执行时先去执行coding的代码,结束后再去执行drawing的代码,总共耗时6s
接着使用threading模块,使用thread创建两个线程,使两个函数同时运行,这样总共用时3s
(2)使用Thread类创建多线程
除了上述那种写法外,很多开发者也习惯使用类似的方式创建线程,便于封装
(3)多线程共享全局变量以及锁机制A:多线程共享全局变量
多线程都是在同一个进程中进行的,因此在进程中的全局变量所有线程共享。这就造就了一个问题,因为线程执行是无序,所以很可能造成数据错误。线程运行的速度跟线程本身的复杂程度有关
如下程序,当range数目较小时,多个进程执行的结果没有错误
但是将range改为100000时,就出现了错误,这是因为多个进程在同时使用全局变量时发生了矛盾
B:锁机制
所以类似于上厕所,谁先进厕所了,谁就先上,先上的人把门锁了,后上的人就等待。速度快的进程先锁定变量,然后速度慢地等待,接着释放锁,让下一个进程使用变量。这样就避免了数据错误
要特别注意,不要乱用锁,锁只能用于那些修改了变量值的操作,访问变量的操作是不需要上锁的。
标签: #python 多线程模块