Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ZipFile/python-sonyflake-turbo

Repository files navigation

Python SonyFlake (Turbo)

A SonyFlake ID generator tailored for high-volume ID generation.

Installation

pip install sonyflake-turbo

Usage

Easy mode:

from sonyflake_turbo import SonyFlake
sf = SonyFlake(0x1337, 0xCAFE)
for _, id_ in zip(range(10), sf):
 print(f"{id_:016x}")

Turbo mode:

from datetime import datetime, timezone
from random import sample
from timeit import timeit
from sonyflake_turbo import SONYFLAKE_MACHINE_ID_MAX, MachineIDLCG, SonyFlake
get_machine_id = MachineIDLCG(int(datetime.now(tz=timezone.utc).timestamp()))
epoch = datetime(2025, 6, 5, tzinfo=timezone.utc)
for count in [32, 16, 8, 4, 2, 1]:
 machine_ids = sample(range(SONYFLAKE_MACHINE_ID_MAX + 1), count)
 sf = SonyFlake(*machine_ids, start_time=int(epoch.timestamp()))
 t = timeit(lambda: [next(sf) for _ in range(1000)], number=1000)
 print(f"Speed: 1M ids / {t:.2f}sec with {count} machine IDs")

Important Notes

SonyFlake algorithm produces IDs at rate 256 IDs per 10msec per 1 Machine ID. One obvious way to increase the throughput is to use multiple generators with different Machine IDs. This library provides a way to do exactly that by passing multiple Machine IDs to the constructor of the SonyFlake class. Generated IDs are non-repeating and are always increasing. But be careful! You should be conscious about assigning Machine IDs to different processes and/or machines to avoid collisions. This library does not come with any Machine ID management features, so it's up to you to figure this out.

This library has limited free-threaded mode support. It won't crash, but you won't get much performance gain from multithreaded usage. Consider creating generators per thread instead of sharing them across multiple threads.

Development

Install:

python3 -m venv env
. env/bin/activate
pip install -e .[dev]

Run tests:

py.test

Building wheels:

pip install cibuildwheel
cibuildwheel

About

A Sonyflake ID generator tailored for high-volume ID generation

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /