Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性

我们之前的爬虫都是单进程爬虫,也就是串行爬虫,但是在大规模的爬虫中,我们需要多进程爬虫以加快运行速度。
下面直接使用例子进行说说明多进程爬虫,我们爬取糗事百科的文字内容
Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性
Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性
Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性
Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性
我们发现多进程时速度确实更快,如果是数据量更大的爬虫,结果的差距将会更加明显。在任务管理器中我们也可以发现多进程运行时的情况。
那么代码中需要说明的部分是if namemain’:
这句代码在多进程爬虫程序,或者是python其他的多进程程序中至关重要,首先我们看一下不使用这一句出现什么情况
Python每日一记68>>>多进程爬虫与if __name__ == 'main':的重要性
虽然不知道出现了什么问题,但是我们知道一定和if name
main’:有关
所以呢,我首先去查一下if name==‘main’:是什么意思,有何意义
连接如下:
https://blog.****.net/qq_27017791/article/details/80212016
https://blog.****.net/kangkang_hacker/article/details/80466446
首先用最简洁的语言来说明一下 if name == ‘main’: 的作用:防止在被其他文件导入时显示多余的程序主体部分。

每个python模块(python文件,也就是此处的test.py和import_test.py)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“main”等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时,name == 'main’结果为真。
一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。因此if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

以上解释非常重要,即在if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中是不会被执行的。

但是有意思的是,在 Windows 上,子进程会自动 import 启动它的这个文件,而在 import 的时候是会执行这些语句的。如果你这么写的话就会无限递归创建子进程报错。

参考连接
https://blog.****.net/llf_cloud/article/details/81775410
https://blog.****.net/mihanglaoban/article/details/82319892