有没有理由使用threading.Lock over multiprocessing.Lock?

Jas*_*ker 13 python multithreading locking process multiprocessing

如果一个软件项目支持版本的Python是多已回迁到,没有任何理由使用threading.Lockmultiprocessing.Lock?将一个multiprocessing锁不是线程安全的呢?

对于这个问题,有没有理由使用任何来自同步原语threading是也multiprocessing

jno*_*ler 16

由于缺乏处理共享信号量等问题,线程模块的同步原语比多处理更轻,更快.如果使用线程; 使用线程的锁.进程应该使用多处理锁.

  • 在我的程序中,有多个线程和进程。我也可以使用 multiprocessing.Lock 进行线程同步吗? (3认同)
  • 更不用说`multiprocessing`不像`threading`那样可移植;) (2认同)
  • 正如确认一样,获取和释放 100,000 个线程锁需要 0.07 秒,而获取和释放 100,000 个多处理锁则需要 8.1 秒。 (2认同)

Pie*_*BdR 5

我希望多线程同步原语会更快,因为它们可以轻松使用共享内存区域。但我想你必须进行速度测试才能确定。此外,您可能会产生非常不需要的副作用(并且在文档中未指定)。

例如,进程级锁很可能会阻塞进程的所有线程。如果没有,释放锁可能不会唤醒进程的线程。

简而言之,如果您希望代码能够正常工作,那么如果您使用线程,则应该使用线程同步原语;如果使用进程,则应该使用进程同步原语。否则,它可能仅适用于您的平台,甚至仅适用于您的特定版本的 Python。