【问题标题】:uniqueness of os.getpid in multiprocessingos.getpid 在多处理中的唯一性
【发布时间】:2020-12-04 03:22:58
【问题描述】:

我通过 concurrent.futures 在核心上运行一个进程。每个进程都有一个最终调用os.getpid() 的函数。来自os.getpid() 的 ID 是否会在不同的 concurrent.futures 分支中重合?

【问题讨论】:

  • 在我的 ubuntu 系统上,pid 表是 4,194,304 个唯一条目。之后 Pid 将被重复使用。我不确定 Windows 上的旋转速率是多少。 32 位机器可能有 32K 或更少的条目。

标签: python concurrency multiprocessing pid


【解决方案1】:

我不知道os.getpid()返回的值的含义是明确定义的。我很确定您不能依赖具有相同 ID 的两个正在运行的进程,但是很可能在某个进程终止后,它的 ID 最终会被重新使用。

这在大多数操作系统中都会发生,os.getpid() 的实现很可能只是调用操作系统并返回相同的值。

【讨论】:

  • 如果我理解正确的话,时间和 pid 的连接应该给出一个唯一的标识符。
  • @guyguyguy12345 - 这取决于此标识符需要的唯一性。如果您在计时器滴答内执行此操作两次,则它会在单台机器上失败。您可以添加一个全局计数器来修复它。如果您在一大群机器上执行此操作,则有可能两台机器会在某处生成相同的数字。如果这个小风险是个问题,那么secrets.token_bytes() 之类的可能会更好。
  • os.getpid 的实现使用了 C 的 getpid 函数。请参阅source for posix systems。在 Windows 上找不到它
猜你喜欢
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多