LoginSignup
0
1

More than 3 years have passed since last update.

【ざっくり】Python のバージョン1 UUID生成の仕様がドキュメントと異なる

Last updated at Posted at 2021-03-31

サマリー

問題

Python 3.9.2 において、UUID バージョン1 を生成する関数 uuid.uuid1(node=None, clock_seq=None) は、clock_seq が与えられない場合はランダムに14ビットのシーケンス番号が選ばれる、と公式ドキュメントには書かれている。しかし、実際に複数回生成してみると、シーケンス番号が同一となる。

どうすればドキュメント通りに生成できるか。

解決方法

uuid.uuid1(node=uuid.getnode()) とすればドキュメント通りに振る舞う。

参考文献

実験環境

  • macOS Big Sur, バージョン 11.12.1
  • Python 3.9.2: anyenvpyenv プラグインでインストール。

調査結果

ネットで検索した結果 (すみません URL 失念しました) によると、

  • node is None の場合は (glibc か何かの?) システム関数が呼ばれる らしい。この場合、少なくとも一定の時間内の複数回生成では、ある決まったシーケンス番号が返ってくる。
  • node に値が割り当てられている場合は Python による実装が呼ばれる。この場合は呼び出し毎にランダムなシーケンス番号が生成されているように見える。

node を省略した場合のデフォルト値は uuid.getnode() なので、uuid.uuid1(node=uuid.getnode()) とすればドキュメント通りに振る舞う。

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1