基于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,并打印出来。

相关文章
|
8天前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
105 26
|
16天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
|
16天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
|
16天前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
109 4
|
16天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
|
16天前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
|
16天前
|
算法 机器人 定位技术
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
【机器人路径规划】基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(Python代码实现)
机器学习/深度学习 算法 自动驾驶
130 0
|
24天前
|
算法 定位技术 调度
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
基于蚂蚁优化算法的柔性车间调度研究(Python代码实现)
|
24天前
|
机器学习/深度学习 算法 PyTorch
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)
【DQN实现避障控制】使用Pytorch框架搭建神经网络,基于DQN算法、优先级采样的DQN算法、DQN + 人工势场实现避障控制研究(Matlab、Python实现)

热门文章

最新文章

推荐镜像

更多