Python线程下使用锁的技巧分享
2018-09-13 15:05
791 查看
使用诸如Lock、RLock、Semphore之类的锁原语时,必须多加小心,锁的错误使用很容易导致死锁或相互竞争。依赖锁的代码应该保证当出现异常时可以正常的释放锁。
典型代码如下:
try: lock.acquire() #关键部分 ... finally: lock.release()
另外,所有种类的锁还支持上下文管理协议(写起来更简洁):
with语句自动获取锁,并且在控制流离开上下文时自动释放锁。
with lock: #关键部分 ...
此外,编写代码时一般应该避免同时获取多个锁,例如下面就应该尽量避免:
这通知很统一导致应用程序神秘死锁,尽管与集中策略可以避免出现这种情况(如分层锁定),但是最好在编写代码时避免这种嵌套锁。
with lock_A: #关键部分 ... with lock_B: #B的关键部分 ...
尽管在Python中可以使用各种锁和同步原语的组合编写非常传统的多线程程序,但有一种首推的编程方式要优于其他所有编程方式:即将多线程程序组织为多个独立任务的集合,这些任务之间通过消息队列进行通信,例如下面要讲的queue模块。
相关文章推荐
- 分享:【转载】Python中使用线程的技巧
- python语言使用技巧分享
- python语言使用技巧分享
- [分享]微软BI专题-SQL Server BI Development Studio使用技巧系列(一)
- Python多线程学习(一、线程的使用)
- [转]Word 使用技巧收集分享
- WebBrowser控件使用技巧分享
- Eclipse使用技巧分享區:熱鍵、外掛、相關技巧... [精華]
- Word使用技巧收集分享(三)
- MySQL内存使用之线程独享的技巧
- Google Reader 使用技巧及OPML订阅源分享
- Google Reader 使用技巧及OPML订阅源分享
- 《软件调试的艺术》学习笔记——GDB使用技巧摘要(4)——Pthread线程调试
- Windows 7使用宝典安装技巧篇(6)——应用分享Win7的特色主题包
- c#使用线程下载文件的控制技巧和缺陷
- Python splitlines使用技巧
- 分享:CSS使用技巧20则
- GNOME桌面使用技巧大全分享
- c#使用线程下载文件的控制技巧和缺陷