新闻详情

新闻详情

首页 / 资讯中心 / 详情

python自定义“雪花算法”ID工具类

发布时间:2026/9/29 6:04:15来源:尧图网络
python自定义“雪花算法”ID工具类
注意机器码参数配置# 虚拟环境py3_8_20_patent_env # 自定义雪花算法 import time import threading class SnowflakeGenerator: def __init__(self, machine_id: int): 初始化雪花ID生成器 :param machine_id: 机器ID (0~1023)需确保不同节点唯一 if machine_id 0 or machine_id 1024: raise ValueError(machine_id 必须在 0~1023 之间) self.machine_id machine_id # 10位机器ID self.sequence 0 # 12位序列号 self.last_timestamp -1 # 上次生成时间戳 self.lock threading.Lock() # 线程锁确保线程安全 # 自定义起始时间可调整为系统上线时间延长ID有效期 self.epoch 1609459200000 # 默认2021-01-01 00:00:00 def generate(self) - int: 生成唯一ID with self.lock: timestamp self._current_time() # 处理时间回拨 if timestamp self.last_timestamp: raise ValueError(f时间回拨当前时间 {timestamp} 上次时间 {self.last_timestamp}) # 同一毫秒内生成 if timestamp self.last_timestamp: self.sequence (self.sequence 1) 0xFFF # 12位序列号自增 if self.sequence 0: # 当前毫秒序列号用尽 timestamp self._wait_next_millis() else: self.sequence 0 self.last_timestamp timestamp # 组合各部分的二进制位 return ( ((timestamp - self.epoch) 22) | # 41位时间差 (self.machine_id 12) | # 10位机器ID self.sequence) # 12位序列号 def parse(self, snowflake_id: int) - dict: 解析雪花ID结构 :return: 包含时间戳、机器ID、序列号的字典 timestamp (snowflake_id 22) self.epoch machine_id (snowflake_id 12) 0x3FF # 0x3FF 二进制 1111111111 (10位) sequence snowflake_id 0xFFF # 0xFFF 二进制 111111111111 (12位) return { timestamp: timestamp, machine_id: machine_id, sequence: sequence, datetime: time.strftime(%Y-%m-%d %H:%M:%S, time.localtime(timestamp / 1000)) } def _current_time(self) - int: 获取当前时间戳毫秒 return int(time.time() * 1000) def _wait_next_millis(self) - int: 等待下一毫秒 timestamp self._current_time() while timestamp self.last_timestamp: time.sleep(0.001) timestamp self._current_time() return timestamp # 使用示例 if __name__ __main__: # 初始化生成器machine_id 需全局唯一 generator SnowflakeGenerator(machine_id1) # 生成ID snowflake_id generator.generate() print(f生成的ID: {snowflake_id}) # 输出如 1318958301703372800 # 解析ID print(解析结果:, generator.parse(snowflake_id)) # 输出: {timestamp: 1715586304000, machine_id: 1, sequence: 0, datetime: 2024-05-12 14:25:04}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电热综合能源系统日前经济调度:从CHP耦合建模到可再生能源消纳的Matlab实现 2026/9/29 7:55:54

电热综合能源系统日前经济调度:从CHP耦合建模到可再生能源消纳的Matlab实现

1. 问题背景与模型核心思路1.1 为什么要研究电热综合能源系统的日前调度做电力系统优化调度的同行应该都有体会,传统的经济调度模型基本是围绕纯电力系统展开的——机组组合、备用安排、潮流约束,这些内容在各类教材和论文里已经很成熟。但最近几年&…

阅读更多 →
Claude Code与Codex分工实战:AI说完成不等于代码可以提交 2026/9/29 7:55:54

Claude Code与Codex分工实战:AI说完成不等于代码可以提交

最近我的终端里同时跑着 Claude Code 和 Codex。用了一段时间之后,我发现两个问题必须拿出来聊聊:这两个工具到底怎么分工?以及一个更隐蔽的坑——AI agent 在对话框里打出“任务已完成”之后,很多人顺手就把代码 push 上去了&…

阅读更多 →
Windows下Ubuntu 20.04/18.04三系统安装与GRUB实战 2026/9/29 7:55:54

Windows下Ubuntu 20.04/18.04三系统安装与GRUB实战

Ubuntu 20.04 和 18.04 这两个版本放在同一台 Windows 机器上,听起来像是折腾,但在实际工作里这种需求一点都不少见。有人是为了跑 ROS Noetic(20.04 是官方主推)同时又要兼容某个只在 18.04 上编译通过的老项目;有人是…

阅读更多 →
Postman响应面板详解:从状态码到Tests断言,高效排查接口问题 2026/9/29 7:55:54

Postman响应面板详解:从状态码到Tests断言,高效排查接口问题

1. 响应面板整体布局:拿到一次请求结果后先看哪里如果你已经把 Postman 系列从头跟到这里,大概率已经会用 Postman 发 GET、POST 请求,也会配置 Header、Body、Params 了。但很多人在发出请求之后,盯着右侧的响应区一脸懵——信息…

阅读更多 →
计算机网络基础IP地址PPT课件:从二进制到子网划分的完整讲解路径 2026/9/29 7:55:47

计算机网络基础IP地址PPT课件:从二进制到子网划分的完整讲解路径

简介:这份PPT课件面向计算机网络入门学习者与课堂教学场景,系统梳理IP地址相关知识,帮助读者建立从地址结构到子网划分的完整认知。课件共14页,围绕点分十进制与二进制互转、IP地址的Network ID与Host ID组成、A至E五类地址划分、…

阅读更多 →
基于Springboot的二手车交易网站的设计与实现 2026/9/29 7:55:47

基于Springboot的二手车交易网站的设计与实现

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着汽车保有量的持续增长和消费观念的转变,二手车交易市场呈现出快速发展的态势。传统的线下二手车交易存在信息不对称、车源分散、交易…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉