在Python定时器中Lock的实际应用操作方案详解

开发 后端
如果你在Python定时器这一计算机语言的实际操作过程中遇到了令你很难理解的问题时,你就可以浏览我们的文章对Python定时器有更好的了解。

Python定时器是计算机常用的计算机语言,在其广泛的实际应用操作中会涉及到Lock的实际应用,如果你对Python定时器中Lock的实际应用感兴趣的话,你可以通过我们的文章对其有更深的了解。

在Python定时器中Lock的实际应用

Lock/RLock 和 C# lock 关键字差不多意思。不同的是,Lock/RLock 只需 "锁定" 自己,而 C# lock 还得另外找个引用类型对象。Lock 有个问题就是同一个线程内部也不能多次 "锁定",否则会死锁。RLock 没有这个问题,它会处理 "owning thread" 和 "recursion level" 状态,对于同一线程的多次请求锁行为,只累加计数器。

每次调用 release() 将递减该计数器,直到 0 时释放锁,因此记住 acquire() 和 release() 要成对出现。直接用 RLock,忘了 Lock 吧。

非锁定版本:

  1. def test():  
  2. for i in range(3):  
  3. print currentThread().name, i  
  4. sleep(1)  
  5. for i in range(2):  
  6.  
  7. Thread(target = test).start()   

 

输出:

  1. $ ./main.py  
  2. Thread-1 0  
  3. Thread-2 0  
  4. Thread-1 1  
  5. Thread-2 1  
  6. Thread-1 2  
  7. Thread-2 2   

 

锁定版本:

  1. lock = RLock()  
  2. def test():  
  3. lock.acquire()  
  4. try:  
  5. for i in range(3):  
  6. print currentThread().name, i  
  7. sleep(1)  
  8. finally:  
  9. lock.release()  
  10. for i in range(2):  
  11. Thread(target = test).start()   

 

输出:

  1. $ ./main.py  
  2. Thread-1 0  
  3. Thread-1 1  
  4. Thread-1 2  
  5. Thread-2 0  
  6. Thread-2 1  
  7. Thread-2 2   

 

RLock 实现了 Context Management Protocol,会自动调用 acquire() 和 release() 函数,因此直接用 with/as 来实现 C# "lock(o) { ... }"。

 

  1. lock = RLock()  
  2. def test():  
  3. with lock:  
  4. for i in range(3):  
  5. print currentThread().name, i  
  6. sleep(1)  
  7. for i in range(2):  
  8. Thread(target = test).start()   

【编辑推荐】

  1. Python web框架在实际操作过程中的缺点
  2. Python二维数组在创建过程中步骤详解
  3. Python字符串中字符的大写与小写的变化
  4. Python Web中通过命令行工具启动导出源操作
  5. Python运行效率优于C语言的功能简介
       
责任编辑:佚名 来源: 互联网
相关推荐

2010-03-23 14:54:27

Python目录文件

2010-03-19 15:16:11

Python代码

2023-01-10 13:53:21

Linux定时器

2010-07-28 15:56:22

FlexTimer定时

2010-03-17 16:27:39

Python矩阵转置

2010-03-16 10:00:37

Python函数

2010-03-17 13:14:00

Python Libr

2010-03-17 12:20:15

Python Libr

2010-03-16 16:47:25

Python数组

2010-03-17 14:18:27

Python open

2010-03-16 18:59:47

Python模块

2009-11-09 11:21:32

路由策略

2010-03-29 15:33:18

Oracle EXP

2010-03-17 15:58:08

Python环境

2011-08-22 15:47:27

Oracle临时表存储过程

2009-12-30 10:23:30

VLAN技术

2023-02-28 18:09:53

Javascript定时器

2010-03-17 14:42:09

Python 文件

2010-04-12 14:44:06

Oracle Impd

2010-03-17 15:01:24

Python复制文件
点赞
收藏

51CTO技术栈公众号