我有两个线程同时运行的两个函数。这两个函数都调用此方法PyObject_CallObject(pFunc,pArgs)
来执行两个不同的python函数。但是,access violation reading location
当我尝试这样做时,我会遇到异常。pFunc
并且pArgs
在两个功能中使用的功能均是该功能的本地功能,并且没有共享数据。还是我如何获得例外?
那是不可能的。你必须调用任何的Python CAPI函数之前获得全局解释锁(GIL)。没有GIL的情况下,只有少数几个函数可以调用。
https://docs.python.org/2/c-api/init.html#thread-state-and-the-global-interpreter-lock
Python解释器不是完全线程安全的。为了支持多线程Python程序,有一个全局锁,称为全局解释器锁或GIL,必须先由当前线程持有,然后才能安全地访问Python对象。没有锁,即使是最简单的操作也可能在多线程程序中引起问题:例如,当两个线程同时增加同一对象的引用计数时,引用计数最终只能被增加一次,而不是两次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句