一、进程
计算机程序都是保存在磁盘里的。只有被加载到内存中被操作系统调用,才有生命周期。进程:表示一个执行中的程序,正如我们打开任务管理器所看到的的一样,运行了很多系统进程。有时候称之为:重量级进程
二、线程
线程(有时候称为:轻量级进程)他们是在进程下执行的,类似于一条主线程下还能调用其他小线程
三、多线程概念—(老鸟略过)
假如不用多线程-程序只有一条主线程来跑程序需要使用10秒,而调用两条线程去跑理论上说五秒钟就可以跑完,这大大节约了时间,让计算机的性能最大化,大大提升了效率。在爬虫方面多线程是必不可少的,本是一条主线程爬取一个网页,假如通过主线程同时运行了十条子线程,同时爬取十种不同的网页,而且还是用爬取一次的时间完成,这是不是很爽呢? 上述废话了很多,一个简单的多线程的概念
“合理” 使用多线程,让程序快人一步,让自己的程序更迷人。
四、python的多线程使用
python使用兼容POSIX的线程,也就是众所周知的pthread
impor thread
首先导入多线程模块 如果你的python解释器没有将线程支持编译进去,模块导入将失败,无法找到 在Linux下你可能需要重新编译你的解释器,window重装一次python环境
我们先来看下如果没有使用多线程的情况:
1、创建两个时间循环:
一个loop0()睡眠4秒
一个loop1()睡眠2秒 整个执行时间至少会达到六秒以上 再加上一些定义、执行、声明等的开销 可能长达7秒
执行输出以下结果:
假如loop0和loop1是独立的程序 那么我们是不是可以通过多线程一起执行呢节约时间,当然这才两秒钟 如果程序很多呢
2、使用之前介绍一下thread模块中的方法
输出以下结果:
start_new_thread()必须传前两个参数,也就是说第二个参数不传值也需要传递一个空元祖tuple可以通过看出 loop0 和loop1 是并发执行的,节约了两秒执行时间。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
为什么要加一个sleep(6)我们不妨去掉可以尝试下 他是和执行loop函数一起执行了最后一句代码打印 完成
通过以上案例可以看出 生产出来的两个子线程之间相互不影响 并且主线程 还会继续往下执行
3、sleep(6) 并不靠谱 执行程序你会算时间吗 显然不会 如果不加会使程序提前或过晚退出主线程,这就是引出 锁的原因
修改代码如下:
执行结果:
由于GIL在python里的多线程是假的,当然会采用调用c语言的多线程.最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~
经过以上应该有了一个多线程的概念这只是假多线程中最简单的一个模块
稍加改下代码 就可实现 同时爬取两个不同网页,和单线程爬取一个网页时间差不多相同