Python爬虫编程思想(139):多线程和多进程爬虫--线程锁
Posted 蒙娜丽宁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫编程思想(139):多线程和多进程爬虫--线程锁相关的知识,希望对你有一定的参考价值。
多线程的目的就是让多段程序并发运行,但在一些情况下,让多段程序同时运行会造成很多麻烦,如果这些并发运行的程序还共享数据的话,有可能会造成脏数据以及其他数据不一致的后果。这里的脏数据是指由于多段程序同时读写一个或一组变量,由于读写顺序的问题造成了最终的结果与我们期望的不一样的后果。例如,有一个整数变量n,初始值为1,现在要为该变量加1,然后输出该变量的值,目前有两个线程(Thread1和Thread2)做同样的工作。当Thread1为变量n加1后,这时CPU的计算时间恰巧被Thread2夺走,在执行Thread2的线程函数时又对变量n加1,所以目前n被加了两次1,变成了3。这时不管是继续执行Thread2,还是接着执行Thread1,输出的n都会等于3。这也就意味着n等于2的值没有输出,如果正好在n等于2时需要做更多的处理,这也就意味着这些工作都不会按预期完成了,因为这时n已经等于3了。我们把这个变量当前的值称为脏数据,就是说n原本应该等于2的,而现在却等于3了。这一过程可以看下面的线程函数。
n = 1
# 如果用多个线程执行fun函数,就有可能造成n持续加1,而未处理的情况
def fun()
n += 1
print(n) # 此处可能有更多的代码
以上是关于Python爬虫编程思想(139):多线程和多进程爬虫--线程锁的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程
Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程
Python爬虫编程思想(142):多线程和多进程爬虫--多进程
Python爬虫编程思想(142):多线程和多进程爬虫--多进程