繁体   English   中英

使用boost.python的真正多线程

[英]True multithreading with boost.python

我正在尝试测试多线程C ++ DLL。 该DLL应该是线程安全的。 我用boost.python包裹了它,并且我想创建多个python线程来通过boost.python包装器执行DLL。 我实际上是在尝试引起线程问题。

我似乎找不到很好的文档,是python解释器是否将同时支持其两个线程(例如,在不同的内核上)调用导入的模块,以及鉴于我不愿意,GIL是否根本需要维护?想要DLL应该提供的安全之外的任何附加安全性。

谁能描述或引述我从多个线程调用DLL模块的python的描述,以及在这种情况下应如何使用GIL?

通过Boost.Pyhton从Python调用C ++函数时如何释放GIL:

http://wiki.python.org/moin/boost.python/HowTo#Multithreading_Support_for_my_function

答案是否定的,除非DLL手动释放锁,否则GIL将永远不会真正实现多线程。 Python允许一次只运行一个线程,除非扩展程序手动说“我被阻止,没有我继续前进”。 这通常是通过python的include / ceval.h中定义的Py_BEGIN_ALLOW_THREADS宏(和Py_END_ALLOW_THREADS撤消)来完成的。 扩展执行此操作后,python将允许另一个线程运行,并且第一个执行python任务的线程可能会引起问题(如注释问题所述。)这实际上是为了阻塞I / O或占用大量计算时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM