Python3 线程中常用的有两个模块:_thread和threading

thread 模块已被废弃在Python3已经不能使用,。为了兼容性,Python3 将 thread 重命名为 "_thread",在这里我们讲一下threading模块。

引用threading模块的代码是:

python学习之路(21):python3中的线程简单讲解

我们先写一个函数,在后面用于线程测试:

python学习之路(21):python3中的线程简单讲解

上面代码中,threadName参数为后面调用传进来的线程名称。然后循环输出3次线程。线程一般用来处理耗时的操作,所以上面代码中引入time模块,每循环一次暂停1秒来模拟耗时操作。

先来看看不用线程,调用上面函数2次的输出情况:

python学习之路(21):python3中的线程简单讲解

输出结果:

python学习之路(21):python3中的线程简单讲解

从上面可以看出,不用线程的话是先执行完1再执行2的。

现在用线程来调用2次函数看看是什么情况:

python学习之路(21):python3中的线程简单讲解

启动一个线程是Thread().start()。里面的2个参数,第一个target是函数名称,第二个args是函数的参数,如果函数有多个参数args后面括号里就写几个参数。

线程输出结果:

python学习之路(21):python3中的线程简单讲解

可以看到输出结果线程1和线程2是交替执行的。

在前面有一篇文章是抓取小说的,这里我们把那个代码改一下,改成用线程的。

python学习之路(21):python3中的线程简单讲解

上面原来的代码是获取到所有章节的标题和URL之后,循环再获取章节的正文。现在我们把获取章节正文的代码写成一个函数,每循环一次就丢进线程里。

获取章节正文函数:

python学习之路(21):python3中的线程简单讲解

线程调用:

python学习之路(21):python3中的线程简单讲解

执行之后,小说已经保存到本地文件了。

python学习之路(21):python3中的线程简单讲解

但是这样有一个问题,上面说了线程是交替执行了,所以保存文章章节不一定是按照章节顺序保存的,有可能是最后一章的线程先执行也不一定。

看看刚刚保存的小说:

python学习之路(21):python3中的线程简单讲解

刚刚执行的代码先执行了16章的线程,所以就先保存了16章。这篇文章的内容是讲线程就不再去研究怎么让线程按顺序保存了。

需要抓取小说代码的请阅读:

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说