غلاف Python لـ Farmhash و CityHash ، وهي عائلة من وظائف التجزئة السريعة غير الصلبة.
للتثبيت من PYPI:
pip install cityhashللتثبيت في بيئة كوندا:
conda install -c conda-forge python-cityhash تعرض الحزمة Python Apis لـ CityHash و Farmhash تحت مساحات أسماء cityhash و farmhash ، على التوالي. يوفر كل منها تطبيقات 32 و 64 و 128 بت.
مثال الاستخدام لـ Farmhash:
> >> from farmhash import FarmHash32 , FarmHash64 , FarmHash128
> >> FarmHash32 ( "abc" )
1961358185
> >> FarmHash64 ( "abc" )
2640714258260161385
> >> FarmHash128 ( "abc" )
76434233956484675513733017140465933893بصمات الأصابع عبارة عن تجزئة بدون بذور مضمونة لتكون مستقلة عن الأجهزة والمنصة. يمكن أن يكون هذا مفيدًا لتطبيقات الشبكات التي تتطلب قيم التجزئة المستمرة.
> >> from farmhash import Fingerprint128
> >> Fingerprint128 ( "abc" )
76434233956484675513733017140465933893لا يدعم CityHash و Farmhash التجزئة التزايدة ، وبالتالي فهي ليست مثالية لجامع تيارات الشخصيات. إذا كنت بحاجة إلى تجزئة ، ففكر في مكتبة تجزئة أخرى ، مثل Metrohash أو XXHash.
يسمح بروتوكول المخزن المؤقت لكائنات Python بفضح بياناتها كصفائف بايت أولية للوصول السريع دون الحاجة إلى نسخ إلى موقع منفصل في الذاكرة. Numpy هي مكتبة معروفة تستخدم على نطاق واسع هذا البروتوكول.
ستقرأ جميع وظائف التجزئة في هذه الحزمة صفائف بايت من الكائنات التي تعرضها عبر بروتوكول المخزن المؤقت. فيما يلي مثال يوضح تجزئة صفيف numpy رباعي الأبعاد:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 يجب أن تكون المصفوفات numpy متجاورة لهذا العمل. لتحويل صفيف غير مضمون ، استخدم وظيفة Numpy's ascontiguousarray() .
بالنسبة إلى منصات X86-64 ، يتضمن مستودع PYPI لهذه الحزمة عجلات تم تجميعها مع دعم SSE4.2. تستفيد المتغيرات 32 و 64 بت (ولكن ليس 128 بت) من Farmhash بشكل كبير من تعليمات SSE4.2.
لا تستفيد وظائف Vanilla CityHash (تحت وحدة cityhash ) من SSE4.2. بدلاً من ذلك ، يمكن للمرء استخدام وحدة cityhashcrc التي تم توفيرها مع هذه الحزمة التي تكشف وظائف CRC 128 و 256 بت التي تقوم بتسخير SSE4.2. هذه الوظائف سريعة جدًا ، ويتغلب على FarmHash128 على السرعة (لا تتضمن Farmhash وظيفة 256 بت). نظرًا لأن Farmhash هو الخلف المقصود لـ CityHash ، فسأكون حذراً قبل استخدام وظائف CityHash-CRC ، وسوف تتحقق مما إذا كانت توفر عشوائيًا كافيًا لتطبيقك المقصود.
بالنسبة لأولئك الذين يريدون المساهمة ، إليك بداية سريعة باستخدام أوامر صنع:
git clone https://github.com/escherba/python-cityhash.git
cd python-cityhash
make env # create a virtual environment
make test # run Python tests
make cpp-test # run C++ tests
make shell # enter IPython shellلمعرفة أي أهداف متوفرة ، أدخل:
make helpتم تصميم عجلات الحزمة باستخدام cibuildwheel ويتم توزيعها على PYPI باستخدام إجراءات github. تحتوي العجلات على ثنائيات مجمعة ومتاحة للمنصات التالية: Windows-AMD64 و Ubuntu-X86 و Linux-X86_64 و Linux-Aarch64 و MacOSX-X86_64.
للاطلاع على وظائف التجزئة السريعة الأخرى غير الصبغية المتوفرة كملحقات بيثون ، انظر المتروهاش ، والموته ، و xxhash.
ترتبط CityHash Python الأصلي يرجع إلى ألكساندر [أمبير] مارشالوف. أعيد كتابتهم في سيثون من قبل يوجين شيربا ، الذي أضاف أيضا روابط Farmhash. خوارزميات CityHash و Farmhash وتنفيذ C ++ هي من Google.
هذا البرنامج مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر ملف الترخيص المضمن للحصول على التفاصيل.