首页 > 技术文章 > 凯哥带你用python撸算法之雪花算法

qianzhengkai 2019-08-29 10:58 原文

import time
 
 
class Snow(object):
 
    def __init__(self, idx=None):
        init_date = time.strptime('2010-01-01 00:00:00', "%Y-%m-%d %H:%M:%S")
        self.start = int(time.mktime(init_date))
        self.last = int(time.time())
        self.count_id = 0
        self.idx = idx if idx else 0
 
    def get(self):
        now = int(time.time())
        temp = now - self.start
        if len(str(temp)) < 9:
            length = len(str(temp))
            s = '0' * (9 - length)
            temp = s + str(temp)
        if now == self.last:
            self.count_id += 1
        else:
            self.count_id = 0
            self.last = now
        if len(str(self.idx)) < 2:
            length = len(str(self.idx))
            s = '0' * (2 - length)
            self.idx = s + str(self.idx)
        if self.count_id == 99999:
            time.sleep(1)
        count_id_data = str(self.count_id)
        if len(count_id_data) < 5:
            length = len(count_id_data)
            s = '0' * (5 - length)
            count_id_data = s + count_id_data
        return ''.join([temp, self.idx, count_id_data])
 
 
if __name__ == '__main__':
    import threading
    snow = Snow('001')
 
    def echo():
        print(snow.get())
 
    threads = [threading.Thread(target=echo) for i in range(100)]
    for t in threads:
        t.start()
    for t in threads:
        t.join()

推荐阅读