Python实现子线程有序执行有什么方法?
Admin 2021-10-23 群英技术资�
这篇文章主要给大家分享Python实现子线程有序执行的内容,下文有具体的代码和讲解,感兴趣的朋友可以了解看看,希望大家阅读完这篇文章能有所收获,下面我们一起来学习一下吧�
线程的执行是由系统的CPU调度算法所决定的,调度算法按照一系列的要求来� 就绪队列� 选择合适的线程分配CPU资源�
好了,换句话说,线程的执行顺序是不确定的。来个python代码我们看一下:
import threading def fun(): '''执行函数''' print(threading.current_thread().getName()+' 正在执行�') # 线程队列 ths = [] for i in range(10): ths.append(threading.Thread(target=fun)) # 依次启动线程 for th in ths: th.start()
看一下效果:
不难看出,虽然第一次运行的结果时有序执行子线程,但是后续重复运行程序的结果,显然是顺序不确定的� 这就正好体现了线程的随机性�
那么我们在某种特殊的场景下,我们需要让子线程按照顺序有序执行,那改怎么做呢�
通过查询threading
API我们可以发现一个这样的函数�
Thread.join(timeout=None)
该方法的作用�等待当前执行线程终止
也就是说,哦那我调用start()
方法开始线程之后,再调用这个方法不就行了吗?答案是肯定�
import threading def fun(): '''执行函数''' print(threading.current_thread().getName()+' 正在执行�') # 线程队列 ths = [] for i in range(10): ths.append(threading.Thread(target=fun)) # 依次启动线程 for th in ths: th.start() th.join()
看一下效果:
这时候我们发现,不管如何运行子线程的执行顺序都是有序�
就这一种方法吗?当然不是的,而且上面那种方法,如果是控制台界面是没有问题的,但是如果是GUI界面,那就由大问题了�
那么我们再想�join()
方法,还可以换种方法用吗�
我们可以用一个小技巧,可以将上一个线程传入target�
在函数中判断,如果上一个线程还在执行,那么就调�join()
方法等待其执行,等待执行完毕后,再让当前线程执行�
代码�
import threading def fun(preThread): '''执行函数''' # 等待上一个线程执行完� if preThread != None: preThread.join() # 执行当前线程 print(threading.current_thread().getName()+' 正在执行�') # 线程队列 ths = [] for i in range(10): if i == 0: ths.append(threading.Thread(target=fun, args=(None, ))) else : ths.append(threading.Thread(target=fun, args=(ths[-1], ))) # 依次启动线程 for th in ths: th.start()
看一下效果:
这个时候,我们发现,子线程的执行顺序也是有序的!Nice�
通过以上两种解决,完美解决这个问题!
关于Python实现子线程有序执行的内容就介绍到这,希望能对大家有帮助,想要了解更多子线程执行的内容,大家可以关注其它的相关文章�
文本转载自脚本之�
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
Python 中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调� _thread 模块中的 start_new_thread() 函数来产生新线程�
这篇文章主要为大家介绍了PyTorch搭建LSTM实现多变量时间序列预测及负荷预测,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加�
用python语言实现计算1~100的累加和(包�1�100),直接看代�
这篇文章主要为大家介绍了python神经网络之批量学习tf.train.batch函数示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加�
这篇文章主要介绍了了Python如何实现将多张图片合成一张马赛克图片。文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以学习一�
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所�
增值电信经营许可证 : B1.B2-20140078