失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python多线程 _thread没有上lock时程序提前给你把可执行的都执行 不按代码编写顺序执行

python多线程 _thread没有上lock时程序提前给你把可执行的都执行 不按代码编写顺序执行

时间:2018-07-30 19:55:26

相关推荐

python多线程 _thread没有上lock时程序提前给你把可执行的都执行 不按代码编写顺序执行

下面面这个代码中使用多线程运行线程函数。

使用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时程序提前给你把可执行的都执行 不按代码编写顺序执行》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。