扩展Python标准库的heapq以用于性能应用
项目描述
快速CPython扩展,针对Python标准库性能优化。
此库提供了CPython原生扩展,以模拟一些已知的内置类型。其实施依赖于强制协议 - 所有对象和抽象数据类型都在C/C++中实现,以提供高度有效的操作。
扩展的heapq - fext.ExtHeapQueue
扩展的堆队列作为标准Python库中的最小堆队列。它使用哈希表存储有关索引的信息(值在最小堆队列中的位置),以优化从堆中删除到O(log(N))。
在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-refcount和make 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_wheel和sdist发行版
python3 setup.py bdist_wheel
python3 setup.py sdist
最后,将工件上传到PyPI
auditwheel repair fext/*.whl
twine upload wheelhouse/*.whl
或者,您可以让make all自动完成。
安装
该项目托管在PyPI上。您可以通过pip或Pipenv安装它
pipenv install fext
# pip3 install fext
如果没有符合您系统的发布,则在安装过程中将触发构建过程 - 需要python3-devel和gcc/g++。
用法
这些数据结构是为Thoth的顾问设计的 - 用于存储在解析器内部状态以及强化学习部分中的数据。
项目详细信息
fext-0.2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6a689e3f4bf6425145e01ce31300150bb77ea82f0a5ee5f9c8c700c37204f2c4 |
|
MD5 | 577aa35661aeee51259e861c73e0bda7 |
|
BLAKE2b-256 | 8f4f2491df9fbd4f47975b6e4c66befab3dd4447cb6fb1ee591a115ea80371bf |
fext-0.2.0-cp38-cp38-manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | efa386dcd40bf3dde7c10c86a3781ea4c63cd3b6bc392582ef3a66d0663a4b1e |
|
MD5 | 0ac5ee295cc6f607c02e12e0b20dbe44 |
|
BLAKE2b-256 | c24a2632ba715b88d84aa6f3b9d9c209088bf9b6f9c30dd8c5cd66ebd1a67c7d |
fext-0.2.0-cp36-cp36m-manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d7b1f083a14f95074808dcfdaa0aaba27c1b204115c13efdcc9fe67f124e39a6 |
|
MD5 | e85cbbee53c9e4ebe95b4491c064cb8a |
|
BLAKE2b-256 | 0f09196414b71fc7504e9b344478814ac09c5796b7cc65b96d2ff2a548cb66ca |