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

简介: 基于python雪花算法工具类Snowflake-来自chatGPT
import time
 
 
class Snowflake:
    # 定义Snowflake算法的各个参数
    def __init__(self, worker_id: int, datacenter_id: int, sequence: int = 0):
        # 计算位数
        self._worker_id_bits = 5
        self._datacenter_id_bits = 5
        self._sequence_bits = 12
 
        # 定义位偏移量
        self._worker_id_shift = self._sequence_bits
        self._datacenter_id_shift = self._sequence_bits + self._worker_id_bits
 
        # 计算最大ID
        self._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_id
        self.datacenter_id = datacenter_id
        self.sequence = sequence
        self.last_timestamp = -1
 
    # 生成下一个唯一ID
    def 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,则需要进入下一毫秒重新生成ID
            if self.sequence == 0:
                timestamp = self._wait_next_millis(self.last_timestamp)
        else:
            self.sequence = 0
 
        # 保存最后生成ID的时间戳
        self.last_timestamp = timestamp
 
        # 生成最终的唯一ID
        unique_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,并打印出来。

相关文章
Python--turtle库科赫雪花的扩展
使用Python的turtle库创建科赫雪花,并加入随机阶数、尺寸、位置和颜色的功能,每次运行生成不同图像。
Python--turtle库科赫雪花的扩展
|
机器学习/深度学习 人工智能 自然语言处理
让非算法同学也能了解 ChatGPT 等相关大模型
让非算法同学也能了解 ChatGPT 等相关大模型
510 3
让非算法同学也能了解 ChatGPT 等相关大模型
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
1251 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
自然语言处理 API Python
一文告诉你如何用 Python 操作 ChatGPT
一文告诉你如何用 Python 操作 ChatGPT
697 2
|
人工智能 API iOS开发
ChatGPT编程Python小案例(拿来就用)—解压zip压缩文
ChatGPT编程Python小案例(拿来就用)—解压zip压缩文
615 1
|
数据采集 iOS开发 Python
Chatgpt教你开发iPhone风格计算器,Python代码实现
Chatgpt教你开发iPhone风格计算器,Python代码实现
415 1
|
算法 数据库
|
监控 数据可视化 定位技术
这本书凭什么得到ChatGPT认可,评价其为最值得读的Python入门书
在当今这个飞速发展且高度数字化的时代,编程已经成为一项至关重要的技能,其重要性愈发凸显。而 Python 作为一种在众多领域都有着广泛应用且相对来说较为容易学习的编程语言,顺理成章地成为了许多编程初学者的热门选择。 就在昨天,图灵君在浏览豆瓣的时候突然被这样一条评论闪到,一位网友说:“ChatGPT 推荐给我的入门书”。我想这书莫不是口碑爆棚、备受好评的蟒蛇书《Python编程:从入门到实践(第3版)》吧!仔细一看还真是!
|
算法 数据中心 Python
Python雪花代码
在这段代码中,`SnowFlake`类用于生成唯一的ID。每次调用 `generate_id`方法时,它都会生成一个新的、唯一的ID。这个ID由时间戳、数据中心ID、工作机器ID和序列号组成,确保了在不同的时间、不同的数据中心、不同的工作机器上都能生成唯一的ID。
600 1
|
机器学习/深度学习 人工智能 算法
为什么ChatGPT等AI大模型都是基于Python开发?
为什么ChatGPT等AI大模型都是基于Python开发?
1032 0

推荐镜像

更多