最近有用logging模块,读了下源码
logging里面有用到thread的lock
fork到子进程后logging正常工作,而且连lock也被复制了,如果thread的lock用的是linux的锁,复制后就很容易有问题
所以干脆看看thread里的lock怎么实现的
正好搜索到如下
thread无论Rlock还是Lock都是由如下方法创建
-
PyThread_type_lock
-
PyThread_allocate_lock(void)
-
{
-
...
-
lock = (sem_t *)malloc(sizeof(sem_t));
-
-
if (lock) {
-
status = sem_init(lock,0,1);
-
CHECK_STATUS("sem_init");
-
....
-
}
-
...
-
}
也就是说python的锁并不是调用linux的锁函数生成的
只是在系统里开辟了一个信号量,而且第二个参数是0
参考
当第二个参数为0的时候,信号不被其他进程共享
fork后这个信号就是独立的
所以
fork后可以随意使用python的thread lock
阅读(1772) | 评论(0) | 转发(0) |