处未处理的异常多数组.pyd程序第二次运行

2024-10-03 02:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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


Tags: inpy程序文件夹插件错误exceptionsimple
2条回答

类似的问题发生在pyHookpyxhook库中。花了很长时间来找出这两个模块崩溃的原因,但在网上没有线索。现在我发现它也发生在numpy上。希望这一次能解决我的两个问题。在

在我的嵌入式解释器代码中禁用了python线程支持之后,这个问题就解决了。顺便说一下,我已经在用C代码创建的POSIX线程中运行了解释器。在

//PyEval_InitThreads();
//gstate = PyGILState_Ensure();
//PyGILState_Release(gstate);

现在我可以运行我的py.script脚本和纽比和派胡克玩了很多次。但是,如果模块thread是在python脚本中直接导入的,或者是由任何其他导入的模块导入的,则会在C代码的末尾导致以下错误消息。在

^{pr2}$

但我还是觉得需要一个更好的解决方案。在

我设法克服了这个问题。似乎有些模块的初始化例程被多次调用时会出现问题,numpy就是其中之一。解决方案是在程序的最后只调用Py_Finalize()一次。Py_Initialize()可以任意调用,就像Python已经初始化一样,Py_Initialize()是非操作的。。。在

而且,还发现这种解决方案使应用程序更快,因为python不需要每次调用它的某些函数时都重新启动。在

关于它的更多信息here

相关问题 更多 >