通过一个简单的例子理解 Python 中的多线程

如何实现一边写代码一边掉头发?

Posted by Paradise on May 11, 2023

关于进程和线程的概念可以看这篇文章

什么时候需要多线程编程?简单来说就是一个程序里面有比较耗时间的操作,你希望先让它单独跑着,直接开始进行下一步的操作(Python默认情况下会按顺序一步步完成)。看一个简单的例子:

1
2
3
4
5
6
7
8
9
10
import threading
import time

def looper(alert):
	while True:
		print(alert)
		time.sleep(3)

th = threading.Thread(target=looper, args=('hair -1 !', ))
th.start()

可以直接在命令行终端运行这一段代码,就会开始了一个线程,它属于 Python 这个进程。looper 这里是一个死循环,每个三秒在终端打印一段字符。运行后如下:

可以看到 looper 函数已经在一个单独的线程里面跑起来了,这时候 Python 解释器还可以在新的线程里面处理新的操作,比如算一下 1+1 啥的。只要进程没结束,这个线程也会一直运行,直到完成。这个时候如果输入 quit() 命令,会退出 Python 终端,但是循环还是会继续运行,查看任务管理器会发现 Python 进程依然存在。但是 cmd 已经不允许你执行任何命令了,可以理解为 Python 残留了一个线程(因为上例中是一个死循环)。强行关闭 cmd 窗口之后,Python 进程才会结束。

通过这个例子就可以很好地理解它的逻辑,还是很有实际应用价值的。例如在机器学习中,我们可能需要对数据执行不同的特征工程,应用于不同的模型,来对比性能。就可以通过多个线程来并行地执行,加快处理速度。