我正在用c++制作一个.dll插件,并将Python2.7嵌入其中。在
在我导入一个大程序之前,simple.py程序一切正常。最奇怪的是,程序第一次运行时没有问题,但第二次出现异常:
Unhandled exception at 0x6731ADA1 (multiarray.pyd) in EuroScope.exe: 0xC0000005: Access violation writing location 0x00000001.
(Lib/Dll文件夹和模块都复制到.exe文件夹中)
我在网上搜索过,有几个人也有同样的错误,但对他们有用的解决方案对我来说并不适用。例如here
我知道这是一个非常具体的错误,但我希望有人已经设法克服它。 我不会在这里发布代码,因为我认为它与这个bug无关,也因为它太长了
编辑:我发现问题具体在import numpy
类似的问题发生在
pyHook
和pyxhook
库中。花了很长时间来找出这两个模块崩溃的原因,但在网上没有线索。现在我发现它也发生在numpy
上。希望这一次能解决我的两个问题。在在我的嵌入式解释器代码中禁用了python线程支持之后,这个问题就解决了。顺便说一下,我已经在用C代码创建的POSIX线程中运行了解释器。在
现在我可以运行我的py.script脚本和纽比和派胡克玩了很多次。但是,如果模块
^{pr2}$thread
是在python脚本中直接导入的,或者是由任何其他导入的模块导入的,则会在C代码的末尾导致以下错误消息。在但我还是觉得需要一个更好的解决方案。在
我设法克服了这个问题。似乎有些模块的初始化例程被多次调用时会出现问题,
numpy
就是其中之一。解决方案是在程序的最后只调用Py_Finalize()
一次。Py_Initialize()
可以任意调用,就像Python已经初始化一样,Py_Initialize()
是非操作的。。。在而且,还发现这种解决方案使应用程序更快,因为python不需要每次调用它的某些函数时都重新启动。在
关于它的更多信息here
相关问题 更多 >
编程相关推荐