“多线程”编程应用三例
2021-11-24牟晓东
牟晓东
在计算机编程中,“线程”(thread)指的是一组可以在程序中独立执行的指令集合,它是代码执行的最小单位。如果程序在运行过程中只有一个线程的话,那么下一个任务必须要等到上一个任务结束后才能进行,这是一种低效的“串行”流程;引入“多线程”运行机制后,就可以在主线程执行任务的同时“并行”执行其他的任务,几乎不需要等待时间,从而极大提高程序的运行效率。值得一提的是,“多线程”与程序调用函数并不相同,因为函数的调用是“阻塞”执行方式——必须等函数正常执行结束后才会继续执行后面的程序代码(否则会一直处于等待中)。在此分别以Python代码编程和树莓派、掌控板图形化编程为例,演示“多线程”编程的应用。
一、Python:四支“画笔”同时作画
在Spyder编辑器中新建“Python多线程画图.py”文件,首先通过“import turtle”和“from threading import Thread”将海龟库模块和线程库模块导入;接着,设置好“画布”的大小为800×600像素:“turtle.screensize(800,600)”,并且通过turtle模块的Turtle()函数建立t1-t4四个Turtle对象;然后自定义四个画图函数,以my_draw1(a)为例:
传入的参数a控制循环的次序:“for i in range(a):”,循环体只包括“t1.forward(2)”和“t1.left(1)”两行代码,作用是控制t1(Turtle对象)向前走两个像素再向左转1度。比如调用该函数时传入的参数a值为180,则会画一个180度的“半圆”(画笔颜色默认为黑色)。其余的my_draw2(b)、my_draw3(c)和my_draw4(d)三个函数基本类似,只是多了一行“t2.pencolor(‘red)”设置画笔颜色的代码。
接下来,同时开启四个线程,调用目标分别是四个Turtle对象的画图函数,传入的参数均为360(画360度的空心圆):“Thread(target=my_draw1,args=(360,)).start()”、“Thread(target=my_draw2,args=(360,)).start()”、“Thread(target=my_draw3,args=(360,)).start()”和“Thread(target=my_draw4,args=(360,)).start()”,特别要注意args后的参数必须是元组形式“(360,)”(逗号不能省略);最后,添加“turtle.mainloop()”无限循环方式处理事件语句。……
