美文网首页
Python 爬虫 多线程

Python 爬虫 多线程

作者: 末版车 | 来源:发表于2018-11-02 16:26 被阅读0次

1、并发---------------------------------------------------------------------------------------------------------------------------

同时发起多个任务,但是我们的任务是一个一个交替执行的

并行---------------------------------------------------------------------------------------------------------------------------

任务数量小于或等于核心的数量,同时执行

///////////////////////////////////////////////////////

补充:对比线程和进程

(1)、定义

进程:是操作系统分配资源的调度的基本单元

线程/:是依赖于进程执行,线程是cpu执行调度的最小单元

(2)、区别:

进程是会分配资源空间,每一个进程之间的资源不共享

线程则不会占用资源空间,线程之间的资源是共享想得,为了防止资源的错乱。我们一般加线程锁

(3)、使用的场景

进程一般情况下处理机算密集型任务

线程一般情况下处理IO密集型任务

//////////////////////////////////////////////////////////

2、*********************线程的执行顺序

import threading

import time

def do():

print('我要唱歌*****'+threading.current_thread().name)

time.sleep(1)

def tiao():

print('我哟=体哦啊**'+threading.current_thread().name)

time.sleep(1)

ifname== 'main':

threads = []

for i in range(50):

#创建线程

td1 = threading.Thread(target=do)

threads.append(td1)

td2 = threading.Thread(target=tiao)

threads.append(td2)

forthreadinthreads:]

#开启线程

thread.start()

# td1.join()

3、/多线程

python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用

多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞,到sleep结束后,线程进入就绪状态,等待调度。而线程调度将自行选择一个线程执行。上面的代码中只能保证每个线程都运行完整个run函数,但是线程的启动顺序、run函数中每次循环的执行顺序都不能确定。

注意:

多线程的优点是:在一个进程内的所有线程共享全局变量,很方便在多个线程间共享数据

多线程的缺点:缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全)

4、/互斥锁:

当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制

线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁

1

注意:

如果这个锁之前是没有上锁的,那么acquire不会堵塞

如果在调用acquire对这个锁上锁之前 它已经被 其他线程上了锁,那么此时acquire会堵塞,直到这个锁被解锁为止

5、锁的好处:确保了某段关键代码只能由一个线程从头到尾完整地执行

6、锁的坏处:阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了由于可以存在多个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁

死锁案例:

相关文章

网友评论

      本文标题:Python 爬虫 多线程

      本文链接:https://www.haomeiwen.com/subject/jbcqxqtx.html