下面面这个代码中使用多线程运行线程函数。
使用input函数从终端采集一个字符串,采集字符串的目的是让程序暂停。
目的是在所有的线程执行完之前阻止程序退出。
因为程序无法感知是否有线程正在执行,
是否所有的线程函数都执行完毕,所以采取这种手段让程序暂停不退出。
如果了解了锁的概念,就会觉得这种做法Low。
【锁】不是将程序锁住不退出,
而是让程序知道还有没有线程函数没执行完的。
直到所有的线程函数执行完后,
程序自动立刻退出。
当没有【锁】,创建的线程并不是按照顺序执行的,而是随机执行的(那个快就执行那个)
所以下面设定的print()函数提前执行
from time import sleep,ctimeimport _thread as threadimport randomdef fun(a,b):c=random.randint(1,3)#随机的休眠时间print("休眠时间为",c)#输出时因为 执行计算超短,会先输出休眠时间sleep(c)#进行休眠print("No.",a,"线程",b)print("开始时间:",ctime())for i in range(8):#当读取到本行代码时,会自动执行thread.start_new_thread(fun,(i+1,"k"*(i+1)))#第一个参数为线程函数#第二个参数为传递的元组数据参数print("结束时间:",ctime())input("已经结束请输入随意字符,再按回车")
如你测试时后并没有进行休眠,请多保存一次
代码2
def fun(a):b = random.randint(1,3)sleep(b)print("No.",a,"个线程-","休眠时间为:",b)print("开始时间:",ctime())for i in range(3):thread.start_new_thread(fun,(i+1,))print("结束时间",ctime())input("已经结束请输入随意字符,再按回车")
代码3
def fun(a):b = random.randint(1,3)sleep(b)print("No.",a,"个线程-","休眠时间为:",b)print("开始时间:",ctime())def main():for i in range(3):thread.start_new_thread(fun,(i+1,))if __name__=="__main__":main()print("结束时间",ctime())input("已经结束请输入随意字符,再按回车")
如果觉得《python多线程 _thread没有上lock时程序提前给你把可执行的都执行 不按代码编写顺序执行》对你有帮助,请点赞、收藏,并留下你的观点哦!