龙空技术网

Python分布式Spider_7:多线程概述

deeplearning爱好者 177

前言:

此刻你们对“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多线程全局锁