Python3多线程之间的执行顺序问题
2018-08-22 14:52
369 查看
[本文出自天外归云的博客园]
一个多线程的题:定义三个线程ID分别为ABC,每个线程打印10遍自己的线程ID,按ABCABC……的顺序进行打印输出。
我的解法:
from threading import Thread, Lock # 由_acquire解锁执行后释放_release锁 def _print(_id: str, _acquire: Lock, _release: Lock) -> None: for i in range(10): _acquire.acquire() print(f"id:{_id}") _release.release() if __name__ == '__main__': # 创建三个锁供3个线程使用 mutex1 = Lock() mutex2 = Lock() mutex3 = Lock() # 定义三个线程A、B、C # 线程A需要mutex1解锁执行后释放mutex2 # 线程B需要mutex2解锁执行后释放mutex3 # 线程C需要mutex3解锁执行后释放mutex1 # 元组中第一位是自定义的线程ID,第二位是解锁需要的锁,第三位是释放的锁 threads = [Thread(target=_print, args=[i[0], i[1], i[2]]) for i in [('A', mutex1, mutex2), ('B', mutex2, mutex3), ('C', mutex3, mutex1)]] # 把mutex2和mutex3这两把锁先用了以便阻塞线程2和线程3的执行 mutex2.acquire() mutex3.acquire() # 接下来只有线程A可以先执行是因为mutex1并没有被占用 # 线程B和线程C需要分别等待着锁2和锁3的释放才能继续执行 [thr.start() for thr in threads] [thr.join() for thr in threads]
相关文章推荐
- Python3-线程执行顺序问题(生命周期)
- JS一起学01:css复习、js基础知识、事件、参数、函数、网页换肤、if判断、className问题、浏览器执行顺序
- $.unblockUI()和ajax执行顺序问题
- CSS执行顺序与优先权的问题
- Django执行python manage.py syncdb时,出行No module named MySQLdb问题解决方法
- eclipse下python调试if __name__ == '__main__':不执行的问题
- 说说MyBatis插件执行顺序(PageHelper 5 问题)
- javaweb 使用Process执行python脚本中的一个问题
- JavaScript程序执行顺序问题总结(转)
- 补充《动态加载外部.js文件时候,javascript的执行顺序问题》
- Bat执行Python脚本的问题
- Java中for循环中执行顺序问题及break, continue用法
- javascript attachEvent绑定多个事件执行顺序问题
- Java300StudyNote(7)-JVM核心机制(2)-初始化时机-类的主动引用、被动引用、静态初始化块执行顺序问题
- Python_猜数字游戏_初次尝试(遗留问题:猜错后程序自动循环执行未实现)---加入循环搞定
- JavaScript程序执行顺序问题总结
- java中子类继承父类程序执行顺序问题
- javascript执行顺序和执行时间的一些相关问题
- Flash actionscript3.0 多个setTimeout之间会顺序执行 单线程执行 无法中止
- ASP.net验证控件详解和按钮点击事件后验证控件的执行顺序问题以及在确认密码框为空,CompareValidator认为是合法的问题的解决方案