Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1130301
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: Python/Ruby

2016-05-23 16:54:54

最近有用logging模块,读了下源码
logging里面有用到thread的lock
fork到子进程后logging正常工作,而且连lock也被复制了,如果thread的lock用的是linux的锁,复制后就很容易有问题
所以干脆看看thread里的lock怎么实现的

正好搜索到如下


thread无论Rlock还是Lock都是由如下方法创建

点击(此处)折叠或打开

  1. PyThread_type_lock
  2. PyThread_allocate_lock(void)
  3. {
  4.     ...
  5.     lock = (sem_t *)malloc(sizeof(sem_t));

  6.     if (lock) {
  7.         status = sem_init(lock,0,1);
  8.         CHECK_STATUS("sem_init");
  9.         ....
  10.     }
  11.     ...
  12. }

也就是说python的锁并不是调用linux的锁函数生成的
只是在系统里开辟了一个信号量,而且第二个参数是0
参考

当第二个参数为0的时候,信号不被其他进程共享
fork后这个信号就是独立的

所以
fork后可以随意使用python的thread lock


阅读(1810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~