如果没有,有没有办法通过以某种方式编程线程安全性?

为了澄清,在谈论“线程安全”时,我的意思是python线程,而不是OS级线程。

有帮助吗?

解决方案

这完全取决于您的Cython代码和Python的GIL之间的相互作用,如详细记录 这里. 。如果您不做任何特殊的事情,那么Cython生成的代码将尊重GIL(不使用GIL释放宏的C编码扩展名);这使此类代码“如图python代码”为“螺纹保护” - 这不是多大,但要比完全自由线程代码更容易处理(您仍然需要构建多线程合作和同步,理想情况下,可能与队列实例相比锁定&c)。

已经放弃了GIL且尚未获得的代码必须与Python运行时和Python运行时使用的对象进行任何交互 - 这用于Cython以及C编码的扩展。当然,此类代码可以在单独的核心上运行(直到需要与Python运行时进行任何交流)。

其他提示

Python的全局解释器锁意味着,任何时候都只能在解释器中活跃。但是,一旦控件传递给C扩展,另一个线程可以在解释器中活跃。可以创建多个线程,也没有任何阻止线程在关键部分中间被中断。 n

可以在解释器中实现线程安全代码,因此在解释器中运行的代码固有地是线程安全的。 C或PYREX模块中的代码仍然可以修改Python代码可见的数据结构。当然,本机代码也可以与本机数据结构存在线程问题。

除了使用适当的设计和同步之外,您不能保证线程安全性 - Python解释器上的GIL不会实质性地改变这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top