python 實現Twitter的分佈式雪花算法

import socket
import time


class IdWorker(object):
    # 獲取主機名
    HOSTNAME = socket.gethostname()
    # 獲取IP
    IP = socket.gethostbyname(HOSTNAME)
    # 序列號(12位  0-4095)
    SERIAL_NUMBER = 0
    # 時間戳(41位)
    TIMESTAMP = int(time.time() * 1000)
    # 機器id(10位  0-1024)  這裏取機器ip最後8位
    MACHINE_ID = int(IP.split('.')[3])

    @classmethod
    def generate(cls):
        now = int(time.time() * 1e3)
        if now == cls.TIMESTAMP:
            cls.SERIAL_NUMBER += 1
        else:
            cls.TIMESTAMP = now
            cls.SERIAL_NUMBER = 0
        return (cls.TIMESTAMP << 22) + (cls.MACHINE_ID << 12) + cls.SERIAL_NUMBER


if __name__ == '__main__':
    import random

    for i in range(100):
        time.sleep(random.random())
        _id = IdWorker.generate()
        print(_id)

附:IP地址和整型互相轉換

IP = '192.168.1.117'
IP_number = sum(int(j) << i * 8 for i, j in enumerate(IP.split('.')[::-1]))
print(IP_number)
IP_addr = '.'.join([str((IP_number // 256 ** i) % 256) for i in range(3, -1, -1)])
print(IP_addr )

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章