理清 进程 和 线程
进程:(有时也叫重量级进程)是程序的一次执行。每个进程都有自己 的地址空间、内存、数据栈及其记录其运行轨迹的辅助数据。(注意:各个进程有自己的内存空间、数据栈等,所以只能使用进程间通讯IPC,而不能直接共享信息。)
线程:(有时也叫轻量级进程),所有的线程运行在同一个进程中,共享相同的运行环境。线程们可以被想象成是在主进程或者说,“主线程”中并行运行的“迷你进程”。
掌握多线程之前需要搞清楚控制python代码执行的python虚拟机的原理。python解释器中可以“运行”多个线程,但是在任意时刻,只有一个线程在解释器中运行。而全局解释器锁GIL的存在确保了这个条件的成立。
python虚拟机的执行方式:
1.设置GIL
2.切换到一个线程去运行
3.运行:
a.指定数量的字节码的指令
b.线程主动让出控制(time.sleep(1))
4.把线程设置为睡眠状态
5.解锁GIL
6.重复上述步骤
忽略thread模块,使用更加高级更加全面的threading模块。
使用threading.enumerate()函数便可以看到当前线程的数量。
使用threading.current_thread()可以看到当前线程的信息。
使用queue,开启多线程,queue中若是存取了一些页面的url,则会被线程依依取走。一个线程启动后取走一个
request.urlretrieve(url,‘images/’+filename)
url指 图片下载的链接
之后的参数为下载到本地的目录。