基于python雪花算法工具类Snowflake-来自chatGPT

import timeclass Snowflake:# 定义Snowflake算法的各个参数def __init__(self, worker_id: int, datacenter_id: int, sequence: int = 0):# 计算位数self._worker_id_bits = 5self._datacenter_id_bits = 5self._sequence_bits = 12# 定义位偏移量self._worker_id_shift = self._sequence_bitsself._datacenter_id_shift = self._sequence_bits + self._worker_id_bits# 计算最大IDself._max_worker_id = ~(-1 << self._worker_id_bits)self._max_datacenter_id = ~(-1 << self._datacenter_id_bits)self._max_sequence = ~(-1 << self._sequence_bits)# 初始化参数self.worker_id = worker_idself.datacenter_id = datacenter_idself.sequence = sequenceself.last_timestamp = -1# 生成下一个唯一IDdef generate_id(self):# 获取当前时间戳timestamp = int(time.time() * 1000)# 如果当前时间小于上次生成ID的时间戳,则抛出异常if timestamp < self.last_timestamp:raise ValueError("Invalid system clock!")# 如果当前时间戳与上次时间戳相同,则自增序列号if timestamp == self.last_timestamp:self.sequence = (self.sequence + 1) & self._max_sequence# 如果序列号等于0,则需要进入下一毫秒重新生成IDif self.sequence == 0:timestamp = self._wait_next_millis(self.last_timestamp)else:self.sequence = 0# 保存最后生成ID的时间戳self.last_timestamp = timestamp# 生成最终的唯一IDunique_id = ((timestamp << self._datacenter_id_shift) |(self.datacenter_id << self._worker_id_shift) |self.worker_id << self._sequence_bits |self.sequence)return unique_id# 阻塞到下一个毫秒,直到获得新的时间戳def _wait_next_millis(self, last_timestamp):timestamp = int(time.time() * 1000)while timestamp <= last_timestamp:timestamp = int(time.time() * 1000)return timestamp# 测试方法
if __name__ == '__main__':snowflake = Snowflake(worker_id=1, datacenter_id=1)for _ in range(10):unique_id = snowflake.generate_id()print(unique_id)

在上述代码中,我们创建了一个名为Snowflake的类,该类用于生成Snowflake算法的唯一ID。它具有以下主要方法和属性:

  • __init__(self, worker_id: int, datacenter_id: int, sequence: int = 0):初始化Snowflake算法的参数,包括工作节点ID、数据中心ID和序列号的位数。
  • generate_id(self):生成下一个唯一ID。
  • _wait_next_millis(self, last_timestamp):阻塞到下一个毫秒,直到获得新的时间戳。

在测试方法中,我们创建了一个Snowflake实例,并使用其generate_id()方法生成了10个唯一ID,并打印出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

glut实现雪花动态效果

glut实现雪花动态效果 实验题目总体思路3.2主要函数说明按键操作实验结果 实验题目 1.绘制雪花 2.在屏幕的多个随机位置绘制雪花 3.使每朵雪花绕自己的中心旋转 4.使每朵雪花下降 5.翻页键控制相机视野&#xff0c;按UP键增加物体与观察者的距离&#xff0c;按DOWN键缩短。 …

Centos更换网卡名称为eth0

Centos更换网卡名称为eth0 已安装好系统后需要修改网卡名称为eth0 编辑配置文件将ens33信息替换为eth0,可在vim命令模式输入%s/ens33/eth0/g替换相关内容 修改内核文件,添加内容:net.ifnames=0 biosdevname=0 [root@nova3 ~]# vim /etc/default/grub 使用命令重新生成g…

LabVIEW使用DSA技术从X射线图像测量肺气容量

LabVIEW使用DSA技术从X射线图像测量肺气容量 相衬X射线&#xff08;PCX&#xff09;成像技术利用相邻介质之间折射率的微小差异来增强传统X射线成像通常不可见的物体的边界。事实证明&#xff0c;这一进展在一系列生物医学和材料科学中非常有益于材料表征、疾病检测以及解剖形…

Layui实现OA会议系统之会议管理模块总合

目录 一、项目背景 二、项目概述 1. 概述 2. 环境搭建 3. 工具类引用 4. 功能设计 4.1 会议发布 4.2 我的会议 4.3 会议审批 4.4 会议通知 4.5 待开会议 4.6 历史会议 4.7 所有会议 5. 性能优点 5.1 兼容性好 5.2 可维护性和可扩展性 5.3 轻量灵活 5.4 模块化设计…

QT - 建立页面

一、生成页面 二、实现 1.LineEdit 是一个单行输入文本框&#xff0c;为用户提供了比较多的编辑功能&#xff0c;例如选择复制、粘贴。 修改echomode属性为password Push Button(常规按钮) 三、程序 声明全局变量&#xff0c;属于MainWindow private: // 定义了一个指向Ma…

MySQL做分布式锁

分布式锁mysql实现方式 方式1&#xff1a;唯一索引 创建锁表&#xff0c;内部存在字段表示资源名及资源描述&#xff0c;同一资源名使用数据库唯一性限制。多个进程同时往数据库锁表中写入对某个资源的占有记录&#xff0c;当某个进程成功写入时则表示其获取锁成功其他进程由于…

配置root账户ssh免密登录并使用docker-machine构建docker服务

简介 Docker Machine是一种可以在多种平台上快速安装和维护docker运行环境&#xff0c;并支持多种平台&#xff0c;让用户可以在很短时间内在本地或云环境中搭建一套docker主机集群的工具。 使用docker-machine命令&#xff0c;可以启动、审查、停止、重启托管的docker 也可以…

vue使用拖拽功能实现仓库存放货物的需求

效果&#xff1a; 代码 <template><div><div class"bigTitle">xxxxxxxxxxxxxx仓库拖拽系统</div><div class"container2 flex-j-space-between"><div class"product-list"><div class"leftTree h…

ASP.NET中使用Entity Framework(EF)关联表查询

在ASP.NET中使用Entity Framework&#xff08;EF&#xff09;进行关联表查询的具体步骤如下&#xff1a; 配置数据库上下文&#xff08;DbContext&#xff09;&#xff1a;在DbContext派生类中&#xff0c;使用DbSet<T>属性表示每个实体对应的数据库表。确保每个实体类和…

TensorFlow

什么是 TensorFlow TensorFlow是一个开源的机器学习框架&#xff0c;由Google于2015年推出。它被设计用来构建深度神经网络和其他机器学习模型&#xff0c;从而可以实现图像识别、语音识别、自然语言处理、推荐系统、搜索引擎、预测和控制等应用。TensorFlow是一个基于数据流图…

【Spring框架】Spring AOP

目录 什么是AOP&#xff1f;AOP组成Spring AOP 实现步骤Spring AOP实现原理JDK Proxy VS CGLIB 什么是AOP&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;⾯向切⾯编程&#xff0c;它是⼀种思想&#xff0c;它是对某⼀类事情的集中处理。⽐如…

【Jenkins】Jenkins 安装

Jenkins 安装 文章目录 Jenkins 安装一、安装JDK二、安装jenkins三、访问 Jenkins 初始化页面 Jenkins官网地址&#xff1a;https://www.jenkins.io/zh/download/ JDK下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 清华源下载RPM包地址&#xff…

golang使用泛型实现mapreduce操作

1.使用面向对象的方式写 package streamimport ("fmt""log""reflect""sort""strconv""strings" )type Stream[T any] struct {data []TkeyBy stringsortByNum stringsortByStr []string }func FromElem…

数据资产管理和数据治理是什么关系?

数据治理和数据资产管理 数据治理的目的就是让数据更准确、一致、完整、安全、可用&#xff0c;降低总体拥有成本&#xff1b; 数据资产管理就是在数据治理的基础上&#xff0c;对数据资产的行程、确权、价值评估等相关活动进行管理的过程&#xff1b; 数据资产经营是在数据…

【Excel】记录Match和Index函数的用法

最近一直用到的两个处理EXCEL表格数据的函数向大家介绍一下&#xff0c;写这篇博文的目的也是为了记录免得自己忘记了&#xff0c;嘻嘻。 先上百度的链接 Match函数的用法介绍&#xff1a;https://jingyan.baidu.com/article/2fb0ba40b4933941f3ec5f71.html 小结&#xff1a;…

开发一个饲料商城小程序需要多少钱

随着宠物行业的蓬勃发展&#xff0c;饲料商城小程序作为一个重要的销售渠道&#xff0c;吸引了越来越多的投资者。那么&#xff0c;开发一套饲料商城小程序需要多少钱呢&#xff1f;本文将为您详细解答。 首先&#xff0c;开发一套饲料商城小程序的价格受到多个因素的影响&…

架构训练营学习笔记:5-1 计算架构模式之多级缓存架构

序 本节主要是计算架构。 多级缓存架构 缓存与缓冲&#xff1a;通常场景是读缓存&#xff0c;写缓冲。 缓存技术的本质&#xff1a;空间换时间&#xff0c;因此缓存架构属于高性能计算 架构。 缓存设计框架 主要考虑存什么&#xff1f;存多久&#xff1f;存哪里&#xff1f;如…

2023华数杯数学建模竞赛C题思路解析

如下为&#xff1a;2023华数杯数学建模竞赛C题 母亲身心健康对婴儿成长的影响 的思路解析 C题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c;还为婴儿提供情感支持和安全感。母亲心理健康状态的不…

将css文件中的px转化为rem

pxToRem.js /*** 使用方式&#xff1a;* 与引入的文件放在同一目录下进行引用配置&#xff0c;执行:node &#xff08;定义的文件&#xff09;*/ const fs require(fs) const path require(path) /*** entry&#xff1a;入口文件路径 type:Strng* pxtopx&#xff1a;以倍数转…

JS_判断打开的是什么手机品牌,判断是否是手机,平板,pc

判断业务是否是 iphone、华为、小米、oppo、view、三星 打开 手机品牌userAgent库 http://www.fynas.com/ua function judgeBrand(sUserAgent) {var isIphone sUserAgent.match(/iphone/i) iphone;var isHuawei sUserAgent.match(/huawei/i) huawei;var isHonor sUserAge…