Tag: python

通过cython将python字符串传递给C语言

我正在尝试编写一个带有一些c和一些python部分的模块。 我正在使用cython弥补差距。 我想在python中存储我的(非常长的)字符串常量,因为它的语法更好: const char long_string = “\npart of string\n” “next part\n” “last part\n”; 与: long_string = “”” part of string next part last part “”” (字符串比这长得多,而且更复杂 – 我不想每次想要用语法高亮来编辑它时都要添加和删除” s和\n” 。事实上,它们是openCL内核。) 我需要能够使用cython将它们变成c字符串,根据文档我应该只需要: cdef bytes py_bytes = py_string.encode() cdef char* c_string = py_bytes 并且没有手动内存管理,只要我保留对py_bytes的引用, c_string就会起作用。 但是,我无法通过简单的printf测试来实现这一点。 这是我的cython文件: cdef extern from “stdio.h”: printf(char* string) def go(): py_string […]

扩展Python代码 – 添加语言function

我已经在python中独自编程了4年,并且从未在编写python的C代码中进行过深入的研究。 我最近一直在研究一个涉及在该级别修改python的问题。 代码似乎非常一致,因此相对容易理解。 然而,它足够复杂,只是通过研究它如何一起工作对我来说没有意义。 当然,由于缺乏更好的资源,我没有花费太多时间或精力。 我还查看了python站点上的 文档 。 但是,它更倾向于通过模块扩展语言。 我希望找到一些简单的文档,说明解析器如何在C级工作以及如何直接扩展核心语言(添加语言function)。 面向模块的文档提供了一些关于构建类型和管理对象的方式的深刻见解,但我正在寻找更多。 那里有没有这样的文件?

Python,Threads,GIL和C ++

是否有一些方法可以使boost :: python控制Python GIL与python的每次交互? 我正在用boost :: python编写一个项目。 我正在尝试为外部库编写C ++包装器,并使用python脚本控制C ++库。 我无法更改外部库,只能更改我的包装器程序。 (我正在为所述外部库编写function测试应用程序) 外部库是用C语言编写的,并使用函数指针和回调来进行大量繁重工作。 它是一个消息传递系统,所以当一条消息进来时,就会调用一个回调函数。 我在我的库中实现了一个观察者模式,以便多个对象可以监听一个回调。 我把所有主要的球员都妥善地输出了,我可以很好地控制到某一点。 外部库创建线程来处理消息,发送消息,处理等。其中一些回调可能是从不同的进程调用的,我最近发现python不是线程安全的。 这些观察者可以在python中定义,所以我需要能够调用python和python需要在任何时候调用我的程序。 我像这样设置对象和观察者 class TestObserver( MyLib.ConnectionObserver ): def receivedMsg( self, msg ): print(“Received a message!”) ob = TestObserver() cnx = MyLib.Conection() cnx.attachObserver( ob ) 然后我创建一个发送到连接的源,并调用receivedMsg函数。 所以常规的source.send(’msg’)将进入我的C ++应用程序,转到C库,它将发送消息,连接将获取它,然后调用回调,然后返回到我的C ++库和连接尝试通知所有观察者,此时此处是python类,因此它调用该方法。 当然,回调是从连接线程调用的,而不是主应用程序线程。 昨天一切都崩溃了,我无法发送1条消息。 然后在Cplusplus-sig档案中挖掘后,我了解了GIL和一些非常好的function来锁定事物。 所以我的观察者类的C ++ python包装器现在看起来像这样 struct IConnectionObserver_wrapper : Observers::IConnectionObserver, wrapper […]

如何在没有网络的情况下通过wifi发送原始数据包?

我试图在两个覆盆子pi之间通过wifi发送一些数据,而不用它们连接到网络。 我希望它的工作方式类似于信标和探测请求的工作方式,其中广播可以从无线接口发出。 我要发送的数据将是设备的主机名和数据包发送的时间。 我一直试图在过去几天解决这个问题,但如果没有它们在同一个网络上,我就无法工作。 有人能指出我正确的方向吗? 我对于我使用的语言并不太感兴趣。 我一直在尝试使用python和C,但收效甚微。

提取扫描文档的一部分(个人ID) – 选择哪个库和方法?

我必须处理大量扫描的ID,我需要从中提取照片以便进一步处理。 这是一个虚构的例子: 问题是扫描没有完全对齐(旋转到10度)。 所以我需要找到他们的位置,旋转它们并剪下照片。 事实certificate这比我原先想象的要困难得多。 我检查了OpenCV,我发现的唯一的东西是矩形检测,但它没有给我很好的结果:矩形在样本上并不总是匹配得足够好。 此外,它的图像匹配算法仅适用于非旋转图像,因为它只是一种powershell比较。 所以我虽然使用ARToolkit(增强现实库),因为我知道它能够非常精确地在图像上找到给定的标记。 但似乎标记必须非常简单,所以我不能为此目的使用文档的常量部分(如果我错了请纠正我)。 另外,我发现在Ubuntu 11.10上编译它非常困难。 OCR – 还没有尝试过这个,在我开始研究之前,我会感谢任何建议寻找什么。 我寻找C(优选)/ C ++解决方案。 Python也是一个选项。

ctypes:投射字符串function?

我正在阅读文章在笔测试期间躲避反病毒的提示,并对给定的Python程序感到惊讶: from ctypes import * shellcode = ‘\xfc\xe8\x89\x00\x00….’ memorywithshell = create_string_buffer(shellcode, len(shellcode)) shell = cast(memorywithshell, CFUNCTYPE(c_void_p)) shell() shellcode缩短了。 有人可以解释发生了什么吗? 我熟悉Python和C,我尝试过阅读ctypes模块,但还有两个主要问题: 什么存储在shellcode ? 我知道这与C有关(在文章中它是来自Metasploit的shellcode,并且选择了不同的ASCII符号),但是我无法确定它是否是C源(可能不是)或源自某种编译(哪一个?)。 根据第一个问题,演员阵容中发生了什么?

嵌入时Python 3解释器是否会泄漏内存?

此错误报告指出,截至2007年6月,Python解释器在使用嵌入式Python解释器的C / C ++应用程序中调用Py_Finalize后,将不会清除所有已分配的内存。 建议在应用程序终止时调用Py_Finalize一次。 此错误报告指出,从版本3.3和2011年3月开始,解释器仍会泄漏内存。 有谁知道这个问题的当前状态? 我很担心,因为我有一个应用程序,其中每个运行实例多次调用解释器,我遇到内存泄漏。 我已经使用boost :: python来处理引用计数,并清除了在运行之间运行Python程序所创建的所有引用的全局字典。 我有一些单身人士课 – 这可能是问题吗? 这是一个易处理的问题还是Python解释器中的错误?

读入大文件并制作字典

我有一个大文件,我需要阅读并从中制作字典。 我希望这个尽可能快。 但是我在python中的代码太慢了。 这是一个显示问题的最小示例。 首先制作一些假数据 paste <(seq 20000000) largefile.txt 现在这里有一段最小的python代码来读取它并制作一本字典。 import sys from collections import defaultdict fin = open(sys.argv[1]) dict = defaultdict(list) for line in fin: parts = line.split() dict[parts[0]].append(parts[1]) 时序: time ./read.py largefile.txt real 0m55.746s 但是它不是I / O绑定的: time cut -f1 largefile.txt > /dev/null real 0m1.702s 如果我注释掉dict行,则需要9秒。 似乎几乎所有的时间都花在了dict[parts[0]].append(parts[1]) 。 有什么方法可以加快速度吗? 我不介意使用cython甚至C,如果这会产生很大的不同。 或者pandas可以在这帮忙吗? 以下是大小为10000000行的文件的配置文件输出。 python […]

从C创建一个实现__dict__的Python类型?

根据“正常”类创建的__dict__类型是如何在Python中定义的? 有没有__dict__ s的非动态类型的例子? 通过Python的type_new定义的类型是否通过type_new ? tp_dict有一个tp_dict成员,但我找不到有关如何使用它的信息。 在typeobject.c的type_new似乎也有一些事情发生,但我无法清楚地解读它。 以下是我发现的一些相关信息: inheritance自C扩展模块的类中的__dict__ 如何在Python中实现__slots__?

在Python中,为什么用C语言实现的模块比纯Python模块更快,我怎么写一个?

python文档说,cPickle比Pickle快的原因是,前者是用C实现的。这究竟是什么意思? 我正在使用Python制作高级数学模块,有些计算需要花费大量时间。 这是否意味着如果我的程序在C中实现,它可以更快? 我希望从其他Python程序导入这个模块,就像我可以导入cPickle一样。 你能解释一下如何在C中实现Python模块吗?