jsp*_*cer 8 python multithreading boost-python
我正在尝试测试多线程C++ DLL.这个DLL应该是线程安全的.我用boost.python包装它,我想创建多个python线程来通过boost.python包装器来运行DLL.我实际上是在试图引起线程问题.
我似乎无法找到好的文档是python解释器是否支持它的两个线程(比如说在不同的核心上)同时调用一个导入的模块,以及GIL是否需要根据我不需要管理希望任何增加的安全性高于DLL应该提供的安全性.
任何人都可以描述或引用我从多个线程调用DLL模块的python的描述以及如何在这种情况下使用GIL吗?
答案是否定的,GIL永远不会真正的多线程,除非DLL手动释放锁。Python 一次只允许一个线程运行,除非扩展手动说:“我被阻塞了,不用我继续运行。” 这通常是通过 python 的 include/ceval.h 中定义的 Py_BEGIN_ALLOW_THREADS 宏完成的(并使用 Py_END_ALLOW_THREADS 撤消)。一旦扩展执行此操作,Python 将允许另一个线程运行,并且执行任何 Python 操作的第一个线程可能会导致问题(如评论问题所述)。它实际上意味着阻塞 I/O 或进入繁重的计算时间。
归档时间: |
|
查看次数: |
3892 次 |
最近记录: |