草庐IT

python - 在 python 程序中通过 ctypes 使用具有线程本地存储的共享库时发生内存泄漏

我在python中使用ctypes模块来加载共享的c-library,其中包含线程本地存储。它是一个相当大的C库,历史悠久,我们正在努力使线程安全。该库包含大量全局变量和静态变量,因此我们最初的线程安全策略是使用线程本地存储。我们希望我们的库独立于平台,并且一直在win32、win64和64位Ubuntu上编译和测试线程安全。从纯c进程来看,似乎没有任何问题。但是在win32和Ubuntu上的python(2.6和2.7)中,我们看到内存泄漏。当python线程终止时,线程本地存储似乎没有被正确释放。或者至少python进程不知何故“不知道”内存已被释放。实际上,在win32上的c#程

python - 我怎样才能得到方法作为 python ctypes 的回调?

我有一个与pythonctypes包交互的Capi。一切正常,除了这个小花絮。为了将函数注册为某些通知的回调,我调用了这个函数:voidRegisterNotifyCallback(intloginId,intextraFlags,void*(*callbackFunc)(Notification*))所以在python中我的代码看起来像:CALLBACK=ctypes.CFUNCTYPE(None,ctypes.POINTER(Notification))func=CALLBACK(myPythonCallback)myLib.RegisterNofityCallback(45454

python - 使用 ctypes 从共享库映射全局变量

我想映射一个int值pbs_errno使用ctypes在库libtorque.so中声明为全局。目前我可以像这样加载库:fromctypesimport*libtorque=CDLL("libtorque.so")并成功映射了一堆功能。然而,出于错误检查的目的,他们中的许多人设置了pbs_errno变量,所以我也需要访问它。但是,如果我尝试访问它,我会得到:>>>pytorque.libtorque.pbs_errno当然,它不是函数指针,尝试调用它会导致段错误。它在主头文件中声明为intpbs_errno;,在API头文件中声明为externintpbs_errno;。Objdump

python - Python 2 和 3 之间 ctypes 的差异

我有一个调用DLL的工作python2.7程序。我正在尝试将脚本移植到python3.2。DLL调用似乎有效(即调用时没有错误)但返回的数据没有意义。以防万一它可能有用:-该调用采用三个参数:两个int(输入)和一个指向ushort数组的指针(输出)。我尝试过同时使用python和numpy数组,但都没有成功。谁能列举出Python2.7和3.2在ctypes方面的区别?提前致谢编辑这是一些示例代码。DLL是专有的,所以我没有代码。但我确实有Cheader:voidexample(intwidth,intheight,unsignedshort*pointer)python代码是:wi

Python ctypes 参数错误

我用C++编写了一个测试dll,以确保在我开始使用我需要的更重要的dll之前一切正常。基本上它需要两个double并将它们相加,然后返回结果。我一直在玩弄其他测试功能,我已经恢复工作,但由于错误我无法传递参数。我的代码是:importctypesimportstringnDLL=ctypes.WinDLL('test.dll')func=nDLL['haloshg_add']func.restype=ctypes.c_doublefunc.argtypes=(ctypes.c_double,ctypes.c_double)print(func(5.0,5.0))它返回调用“func”的

python - Hello World with go on the appengine : ctypes error

我正在尝试在应用引擎上部署一个go应用程序并按照本教程进行操作:https://developers.google.com/appengine/docs/go/gettingstarted/helloworld?hl=de但是dev_appserver.pygopath/myapp/导致这个奇怪的错误消息:C:\Users\praktikant\Desktop\google_appengine>dev_appserver.pygopath/myapp/INFO2013-07-1610:43:17,565sdk_update_checker.py:244]Checkingforupdat

python - 返回结构时使用 ctypes 的段错误 - 32 位 linux

所以我在32位linux机器上从ctypes得到一个段错误,我无法在64位darwin或linux上重现。这是C:typedefstruct{void*ptr;}doodle;doodleC_intpointerfunction(int*a){*a=41;doodlefoo;foo.ptr=a;returnfoo;}编译为:gcc-cintpointerlibrary.cgcc-sharedintpointerlibrary.o-olibintpointerlib.so这是Python:importnumpyasNfromctypesimport*_libintpointer=N.ct

Python ctypes 在 Linux 上从 libc 调用 reboot()

我试图通过ctypes从Python中的libc调用reboot函数,但我无法让它工作。我一直在引用man2reboot页面(http://linux.die.net/man/2/reboot)。我的内核版本是2.6.35。下面是来自交互式Python提示的控制台日志,我在其中尝试让我的机器重新启动-我做错了什么?为什么ctypes.get_errno()不工作?>>>fromctypesimportCDLL,get_errno>>>libc=CDLL('libc.so.6')>>>libc.reboot(0xfee1dead,537993216,0x1234567,0)-1>>>ge

python - 使用 wine 从 python ctypes 调用标准 windows .dll 时出现段错误

我正在尝试在Linux上运行的Python脚本中调用Kernel32.dll中的一些函数。正如JohannesWeiß指出的那样HowtocallWinedllfrompythononLinux?我正在通过ctypes.cdll.LoadLibrary()加载kernel32.dll.so库,它加载正常。我可以看到kernel32已加载,甚至内部有GetLastError()函数。但是,每当我尝试调用该函数时,我都会遇到段错误。importctypeskernel32=ctypes.cdll.LoadLibrary('/usr/lib/i386-linux-gnu/wine/kerne

Python ctypes 不在 Mac OS X 上加载动态库

我有一个C++库repeater.so,我可以通过以下方式在Linux中从Python加载它:importnumpyasnprepeater=np.ctypeslib.load_library('librepeater.so','.')但是,当我在MacOSX(SnowLeopard,32位)上编译相同的库并获取repeater.dylib,然后在Python中运行以下命令时:importnumpyasnprepeater=np.ctypeslib.load_library('librepeater.dylib','.')我收到以下错误:OSError:dlopen(/mydir/li