Thread safe tips for python extending
来源:互联网 发布:mac 文稿占用空间大 编辑:程序博客网 时间:2024/06/05 10:53
其实习惯了用python写一些单线程的扩展,所以一直没有遇到这种问题
今天在写一个python的扩展模块的时候遇到一个问题. 通过 python启动了一个c++的线程,这个c++线程会回调python的一个接口.调试了很久一直没有意识到是线程安全的原因,因为 c++的线程在调用 python的vm的pyobject时.并不是线程安全的.所以当c++线程直接去操作 vm的某一个object就很有导致出错.
我搜索了资料 在 http://www.python.org/dev/peps/pep-0311/ 有讲到如何同步python的vm. 有两个函数可以做到锁定vm,与c++线程同步.也就是所谓的 GIL(Global Interpreter Lock).
有两种方法来做到:
1 .Py_BEGIN_ALLOW_THREADS,Py_END_ALLOW_THREADS 这一对宏
2. PyGILState_Ensure 与 PyGILState_Release
不过似乎我的Py_BEGIN_ALLOW_THREADS不太好用,我也就没有去深究,因为PyGILState_Ensure就够了.没有太多的时候去研究文档,先用了回过头有时间再研究.
看看我的示例代码:
#include "Python.h"
#include "ceval.h"
class PyGILHelper
{
public:
PyGILHelper():
mState (PyGILState_Ensure())
{
}
~PyGILHelper()
{
PyGILState_Release(mState);
}
protected:
PyGILState_STATE mState;
};
用法很简单:
PyGILHelper lock;
// some c api code
- Thread safe tips for python extending
- Python: Thread safe Oject
- Thread-safe, Signal-safe
- thread safe
- PHP for windows下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别
- Jython Tips for Python Programmers
- Safe Online Business Tips
- [python] What kinds of global value mutation are thread-safe?
- PHP Thread Safe and Non Thread Safe
- python extending with c++
- Thread tips
- Django tips: extending the User model
- Thread Safe In Servlet
- Older Thread-Safe Collections
- Thread-Safe Interface
- Thread safe circular queue
- what is thread safe
- Spring thread safe
- 再谈session
- Rapidshare Premium Pack 2006 v5
- 只有时间才能理解爱的伟大
- 冯仑:大商得道
- VC无闪烁刷屏技术的实现
- Thread safe tips for python extending
- 如何在Flex2项目中引用RSL中的嵌入资源
- C++语言指南(十二)——字符序列
- 在C#中使用COM+实现事务控制(2)
- 今天星期六了。..( 喜德中学 )我的母校
- 收集
- Norton Systemworks (All in One pack)
- all microsoft keygen
- 我的博客开张了