linux下python的线程锁是在fork后是否有效

2050阅读 0评论2016-05-23 lolizeppelin
分类:Python/Ruby

最近有用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


上一篇:python解析window快捷方式
下一篇:OpenStack Mitaka从零开始——消息队列基础