Python wrapper สำหรับ Farmhash และ CityHash ซึ่งเป็นครอบครัวที่มีฟังก์ชั่นแฮชที่ไม่ได้ใช้เนื้อเรื่องอย่างรวดเร็ว
เพื่อติดตั้งจาก PYPI:
pip install cityhashเพื่อติดตั้งในสภาพแวดล้อม conda:
conda install -c conda-forge python-cityhash แพ็คเกจนี้แสดงให้เห็นว่า Python APIs สำหรับ CityHash และ Farmhash ภายใต้ Namespaces 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" )
76434233956484675513733017140465933893CityHash และ Farmhash ไม่สนับสนุนการแฮชที่เพิ่มขึ้นดังนั้นจึงไม่เหมาะสำหรับการแฮชของสตรีมตัวละคร หากคุณต้องการการแฮชที่เพิ่มขึ้นให้พิจารณาห้องสมุดแฮชอื่น ๆ เช่น MetroHash หรือ XXHash
โปรโตคอลบัฟเฟอร์อนุญาตให้วัตถุ Python เปิดเผยข้อมูลของพวกเขาเป็นอาร์เรย์ไบต์ดิบสำหรับการเข้าถึงที่รวดเร็วโดยไม่ต้องคัดลอกไปยังตำแหน่งแยกต่างหากในหน่วยความจำ Numpy เป็นหนึ่งในห้องสมุดที่รู้จักกันดีซึ่งใช้โปรโตคอลนี้อย่างกว้างขวาง
ฟังก์ชั่นแฮชทั้งหมดในแพ็คเกจนี้จะอ่านอาร์เรย์ไบต์จากวัตถุที่เปิดเผยผ่านโปรโตคอลบัฟเฟอร์ นี่คือตัวอย่างการแสดงการแฮชของอาร์เรย์ numpy สี่มิติ:
> >> import numpy as np
> >> from farmhash import FarmHash64
> >> arr = np . zeros (( 256 , 256 , 4 ))
> >> FarmHash64 ( arr )
1550282412043536862 อาร์เรย์ NumPy จะต้องอยู่ติดกันเพื่อให้สิ่งนี้ทำงานได้ ในการแปลงอาร์เรย์ที่ไม่ต่อเนื่องให้ใช้ฟังก์ชัน ascontiguousarray() ของ NumPy
สำหรับแพลตฟอร์ม x86-64 ที่เก็บ PYPI สำหรับแพ็คเกจนี้รวมถึงล้อที่รวบรวมด้วยการสนับสนุน SSE4.2 ตัวแปร 32- และ 64 บิต (แต่ไม่ใช่ 128 บิต) ของ Farmhash ได้รับประโยชน์อย่างมากจากคำแนะนำ SSE4.2
ฟังก์ชั่นวานิลลา CityHash (ภายใต้โมดูล cityhash ) ไม่ได้ใช้ประโยชน์จาก SSE4.2 แต่เราสามารถใช้โมดูล cityhashcrc ที่ให้มาพร้อมกับแพ็คเกจนี้ซึ่งเปิดเผยฟังก์ชั่น CRC 128- และ 256 บิตที่ควบคุม SSE4.2 ฟังก์ชั่นเหล่านี้เร็วมากและเอาชนะ FarmHash128 ด้วยความเร็ว (FarmHash ไม่รวมฟังก์ชั่น 256 บิต) เนื่องจาก Farmhash เป็นผู้สืบทอดของ CityHash ฉันจะระมัดระวังก่อนที่จะใช้ฟังก์ชั่น CityHash-CRC และจะตรวจสอบว่าพวกเขาให้การสุ่มเพียงพอสำหรับการใช้งานที่คุณต้องการหรือไม่
สำหรับผู้ที่ต้องการมีส่วนร่วมนี่คือการเริ่มต้นอย่างรวดเร็วโดยใช้คำสั่ง Make:
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
สำหรับฟังก์ชั่นแฮชที่ไม่ได้ใช้วิธีการอย่างรวดเร็วอื่น ๆ ที่มีอยู่เป็นส่วนขยายของ Python ดูที่ Metrohash, Murmurhash และ XXHash
การผูกมัด Cityhash Python ดั้งเดิมนั้นเกิดจาก Alexander [Amper] Marshalov พวกเขาถูกเขียนใหม่ใน Cython โดย Eugene Scherba ซึ่งเพิ่มการผูก Farmhash อัลกอริทึม CityHash และ Farmhash และการใช้งาน C ++ ของพวกเขานั้นเป็นของ Google
ซอฟต์แวร์นี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT ดูรายละเอียดไฟล์ใบอนุญาต