Python3 线程中常用的有两个模块:_thread和threading
thread 模块已被废弃在Python3已经不能使用,。为了兼容性,Python3 将 thread 重命名为 "_thread",在这里我们讲一下threading模块。
引用threading模块的代码是:
我们先写一个函数,在后面用于线程测试:
上面代码中,threadName参数为后面调用传进来的线程名称。然后循环输出3次线程。线程一般用来处理耗时的操作,所以上面代码中引入time模块,每循环一次暂停1秒来模拟耗时操作。
先来看看不用线程,调用上面函数2次的输出情况:
输出结果:
从上面可以看出,不用线程的话是先执行完1再执行2的。
现在用线程来调用2次函数看看是什么情况:
启动一个线程是Thread().start()。里面的2个参数,第一个target是函数名称,第二个args是函数的参数,如果函数有多个参数args后面括号里就写几个参数。
线程输出结果:
可以看到输出结果线程1和线程2是交替执行的。
在前面有一篇文章是抓取小说的,这里我们把那个代码改一下,改成用线程的。
上面原来的代码是获取到所有章节的标题和URL之后,循环再获取章节的正文。现在我们把获取章节正文的代码写成一个函数,每循环一次就丢进线程里。
获取章节正文函数:
线程调用:
执行之后,小说已经保存到本地文件了。
但是这样有一个问题,上面说了线程是交替执行了,所以保存文章章节不一定是按照章节顺序保存的,有可能是最后一章的线程先执行也不一定。
看看刚刚保存的小说:
刚刚执行的代码先执行了16章的线程,所以就先保存了16章。这篇文章的内容是讲线程就不再去研究怎么让线程按顺序保存了。
需要抓取小说代码的请阅读:
python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说
微软微软v