跳转到主要内容

扩展Python标准库的heapq以用于性能应用

项目描述

快速CPython扩展,针对Python标准库性能优化。

此库提供了CPython原生扩展,以模拟一些已知的内置类型。其实施依赖于强制协议 - 所有对象和抽象数据类型都在C/C++中实现,以提供高度有效的操作。

扩展的heapq - fext.ExtHeapQueue

扩展的堆队列作为标准Python库中的最小堆队列。它使用哈希表存储有关索引的信息(值在最小堆队列中的位置),以优化从堆中删除到O(log(N))。

https://raw.githubusercontent.com/thoth-station/fext/master/fig/fext_extheapq.png

在C++项目中使用fext

此库的设计允许您在C++项目中使用源代码。文件定义了扩展堆队列,而文件定义了扩展字典。Python文件作为相应Python接口的绑定。注意模板类的API设计 - 它旨在与对象指针一起使用(因此避免可能的复制构造函数)。

构建扩展

为了构建扩展,请安装以下包(Fedora)

dnf install -y python3-devel g++ gcc

现在您可以构建扩展

python3 setup.py build

如果您想生成包含调试信息的二进制文件

CFLAGS='-Wall -O0 -ggdb' python3 setup.py build

在下面的部分中查看有关测试扩展的C/C++部分的更多信息。

引用计数和内存泄漏检查

您可以在Git仓库中找到Makefile。该仓库定义了执行泄漏检查和引用计数检查的目标。请注意,它们使用不同的Python解释器(带/不带调试信息),因此请确保在运行测试时不要混合虚拟环境。

make check

开发扩展

首先,准备您的环境

dnf install -y make
make deps

要开发或调整源代码,只需更改源代码并验证您的更改是否被测试套件接受

make check

check目标将运行实际的测试套件(也可参见make test)。除了它之外,测试套件还将执行两次,以检查测试套件及其与Python对象引用计数的交互(将自动安装提供的make deps中的python3-debug依赖项)。可以使用make check-refcount执行测试套件的这一部分。测试套件的最后一部分是对测试套件运行valgrind - 您可以通过调用make check-leaks显式触发这一部分。

请注意,make check-refcountmake check-leaks可能需要一些时间,因为它们在后台执行检查和处理。为了更迭代地验证您的更改,应使用make test(不过,别忘了之后执行make check)。

要清理您的环境,执行

make clean

构建和发布

发布可以从容器化环境中完成

podman run --rm --workdir /io --entrypoint bash -it --volume `pwd`:/io:Z quay.io/pypa/manylinux2014_x86_64 -c "yum install -y make && make all"

要检查正在发生的事情,让我们运行一个容器化环境 - 当您测试或开发扩展时,这可能很有用

podman run --rm --workdir /io --entrypoint bash -it --volume `pwd`:/io:Z quay.io/pypa/manylinux2014_x86_64

以下命令(在上述容器中运行)将安装所有必要的工具

yum install -y make
make deps

一旦测试通过,清理环境

make clean

现在我们应该准备好为PyPI生成bdist_wheelsdist发行版

python3 setup.py bdist_wheel
python3 setup.py sdist

最后,将工件上传到PyPI

auditwheel repair fext/*.whl
twine upload wheelhouse/*.whl

或者,您可以让make all自动完成。

安装

该项目托管在PyPI上。您可以通过pipPipenv安装它

pipenv install fext
# pip3 install fext

如果没有符合您系统的发布,则在安装过程中将触发构建过程 - 需要python3-develgcc/g++

用法

这些数据结构是为Thoth的顾问设计的 - 用于存储在解析器内部状态以及强化学习部分中的数据。

项目详细信息


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源发行版

fext-0.2.0.tar.gz (10.6 kB 查看哈希值)

上传时间:

构建发行版

fext-0.2.0-cp38-cp38-manylinux2014_x86_64.whl (189.9 kB 查看哈希值)

上传时间: CPython 3.8

fext-0.2.0-cp36-cp36m-manylinux2014_x86_64.whl (174.3 kB 查看哈希值)

上传时间 CPython 3.6m

支持